From 87cd1739e419c272392a3900fb58c5f25ebc65b4 Mon Sep 17 00:00:00 2001
From: markilue <745518019@qq.com>
Date: Wed, 19 Apr 2023 21:05:03 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=8E=E4=B8=BA=E7=AC=94=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
interview/Huawei/pom.xml | 46 ++++++
.../com/markilue/interview/Question1.java | 132 ++++++++++++++++++
.../com/markilue/interview/Question2.java | 78 +++++++++++
.../com/markilue/interview/Question3.java | 93 ++++++++++++
4 files changed, 349 insertions(+)
create mode 100644 interview/Huawei/pom.xml
create mode 100644 interview/Huawei/src/main/java/com/markilue/interview/Question1.java
create mode 100644 interview/Huawei/src/main/java/com/markilue/interview/Question2.java
create mode 100644 interview/Huawei/src/main/java/com/markilue/interview/Question3.java
diff --git a/interview/Huawei/pom.xml b/interview/Huawei/pom.xml
new file mode 100644
index 0000000..f5ed4c2
--- /dev/null
+++ b/interview/Huawei/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ com.markilue.interview
+ Huawei
+ 1.0-SNAPSHOT
+
+
+
+ 8
+ 8
+
+
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ junit
+ junit
+ 4.13.2
+ compile
+
+
+ org.projectlombok
+ lombok
+ RELEASE
+ compile
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/interview/Huawei/src/main/java/com/markilue/interview/Question1.java b/interview/Huawei/src/main/java/com/markilue/interview/Question1.java
new file mode 100644
index 0000000..9a997c3
--- /dev/null
+++ b/interview/Huawei/src/main/java/com/markilue/interview/Question1.java
@@ -0,0 +1,132 @@
+package com.markilue.interview;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Scanner;
+
+/**
+ *@BelongsProject: Huawei
+ *@BelongsPackage: com.markilue.interview
+ *@Author: markilue
+ *@CreateTime: 2023-04-19 19:02
+ *@Description: TODO
+ *@Version: 1.0
+ */
+public class Question1 {
+
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+ int count = sc.nextInt();
+ int[][] nums = new int[count][2];
+ int index = 0;
+ while (count-- > 0) {
+ nums[index][0] = sc.nextInt();
+ nums[index][1] = sc.nextInt();
+ }
+ Arrays.sort(nums, new Comparator() {
+ @Override
+ public int compare(int[] o1, int[] o2) {
+ return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0];
+ }
+ });
+ int res=0;
+ ArrayList single = new ArrayList<>();
+ ArrayList multi = new ArrayList<>();
+ for (int i = 0; i < nums.length; i++) {
+ if(nums[i][0]<=nums[i-1][1]){
+ if(multi.size()>0&&nums[i][0] 0) {
+ nums[index][0] = sc.nextInt();
+ nums[index][1] = sc.nextInt();
+ }
+
+ }*/
+
+ @Test
+ public void test() {
+ int[][] nums = new int[][]{{2, 5}, {8, 9}};
+// int[][] nums = new int[][]{{4,8}, {1,6},{2,9}};
+ solve(nums);
+ }
+
+ public void solve(int[][] nums) {
+ Arrays.sort(nums, new Comparator() {
+ @Override
+ public int compare(int[] o1, int[] o2) {
+ return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0];
+ }
+ });
+
+ ArrayList total = new ArrayList<>();
+ ArrayList condition = new ArrayList<>();
+
+
+ int[] last = nums[0];
+
+ int result = 0;
+
+ for (int i = 1; i < nums.length; i++) {
+ if (last[1] > nums[i][0]) {
+
+ total.add(new int[]{last[0], nums[i][0]-1});
+ condition.add(1);
+ if (nums[i][1] < last[1]) {
+ total.add(new int[]{nums[i][0], nums[i][1]});
+ condition.add(2);
+ last[0] = nums[i][1];
+ } else {
+ total.add(new int[]{nums[i][0], last[1]});
+ condition.add(2);
+ last[0] = last[1];
+ last[1] = nums[i][1];
+ }
+ } else {
+ total.add(new int[]{last[0], last[1]});
+ condition.add(1);
+ total.add(new int[]{last[1] + 1, nums[i][0] - 1});
+ condition.add(0);
+ last = nums[i];
+ }
+ }
+ total.add(new int[]{last[0], last[1]});
+ condition.add(1);
+
+ for (int i = 0; i < total.size(); i++) {
+ int[] ints = total.get(i);
+ Integer condition1 = condition.get(i);
+ if(condition1==0){
+ result+=(ints[1]-ints[0]+1);
+ }else if(condition1==1){
+ result+=(ints[1]-ints[0]+1)*3;
+ }else {
+ result+=(ints[1]-ints[0]+1)*4;
+ }
+ }
+ System.out.println(result);
+ }
+}
diff --git a/interview/Huawei/src/main/java/com/markilue/interview/Question2.java b/interview/Huawei/src/main/java/com/markilue/interview/Question2.java
new file mode 100644
index 0000000..ae9884d
--- /dev/null
+++ b/interview/Huawei/src/main/java/com/markilue/interview/Question2.java
@@ -0,0 +1,78 @@
+package com.markilue.interview;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Scanner;
+
+/**
+ *@BelongsProject: Huawei
+ *@BelongsPackage: com.markilue.interview
+ *@Author: markilue
+ *@CreateTime: 2023-04-19 20:02
+ *@Description: TODO
+ *@Version: 1.0
+ */
+public class Question2 {
+
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+ int n = sc.nextInt();
+ int numEdges = sc.nextInt();
+ ArrayList> edges = new ArrayList<>();
+ for (int i = 0; i < n; i++) {
+ edges.add(new ArrayList<>());
+ }
+ for (int i = 0; i < numEdges; i++) {
+ int a = sc.nextInt();
+ int b = sc.nextInt();
+ edges.get(a).add(b);
+ edges.get(b).add(a);
+ }
+ int numObs = sc.nextInt();
+ HashSet set = new HashSet<>();
+ for (int i = 0; i < numObs; i++) {
+ set.add(sc.nextInt());
+ }
+ recur(edges,-1,0,set,0);
+ if(res.length()==0){
+ System.out.println("NULL");
+ }else {
+ System.out.println(res);
+ }
+
+ }
+
+ static int minLen = Integer.MAX_VALUE;
+ static StringBuilder res = new StringBuilder();
+ static StringBuilder path = new StringBuilder();
+
+ public static void recur(ArrayList> edges, int parent, int cur, HashSet set, int len) {
+ //如果当前节点是故障,直接return
+ if (set.contains(cur)) return;
+
+ len += 1;
+ if (path.length() == 0) {
+ path.append(String.valueOf(cur));
+ } else {
+ path.append("->").append(String.valueOf(cur));
+ }
+ int size = edges.get(cur).size();
+ if (size == 1 && edges.get(cur).get(0) == parent) {
+ if(len3){
+ path.delete(path.length()-3,path.length());
+ }
+ }
+}
diff --git a/interview/Huawei/src/main/java/com/markilue/interview/Question3.java b/interview/Huawei/src/main/java/com/markilue/interview/Question3.java
new file mode 100644
index 0000000..cde820b
--- /dev/null
+++ b/interview/Huawei/src/main/java/com/markilue/interview/Question3.java
@@ -0,0 +1,93 @@
+package com.markilue.interview;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ *@BelongsProject: Huawei
+ *@BelongsPackage: com.markilue.interview
+ *@Author: markilue
+ *@CreateTime: 2023-04-19 20:00
+ *@Description: TODO
+ *@Version: 1.0
+ */
+public class Question3 {
+
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+ String[] s = sc.nextLine().split(" ");
+ int[] nums = Arrays.stream(s).mapToInt(Integer::parseInt).toArray();
+ new Question3().solve(nums);
+ }
+
+ @Test
+ public void test(){
+ int[] nums={1,5,3,4,6,5,1};
+ solve(nums);
+
+ }
+
+ public void solve(int[] nums) {
+ List> result = new ArrayList<>();
+ boolean[] used = new boolean[nums.length];
+ for (int i = 1; i < nums.length - 1; i++) {
+ if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {
+ //是引流点
+ used[i] = true;
+ }
+ }
+
+ for (int i = 1; i < nums.length - 1; i++) {
+ if (used[i]) {
+ //是引流点
+
+ result.add(new ArrayList<>(Arrays.asList(nums[i])));
+ //判断他左右能不能加入
+ int left = i - 1;
+ List list = result.get(result.size() - 1);
+ while (left > 0 && !used[left]) {
+ if (nums[left - 1] < nums[left] && nums[left + 1] > nums[left]) {
+ list.add(nums[left]);
+ }
+ if (nums[left - 1] > nums[left] && nums[left + 1] > nums[left]&&nums[left + 1] >nums[left-1]) {
+ list.add(nums[left]);
+ }
+ if (nums[left - 1] > nums[left] && nums[left + 1] > nums[left]&&nums[left + 1] nums[right]) {
+ list.add(nums[right]);
+ flag=false;
+ }
+ if (nums[right - 1] > nums[right] && nums[right + 1] > nums[right]&&nums[right + 1] <=nums[right-1]) {
+ int temp=right;
+ while (temp