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