华为笔试

This commit is contained in:
markilue 2023-04-19 21:05:03 +08:00
parent 5b3e132105
commit 87cd1739e4
4 changed files with 349 additions and 0 deletions

46
interview/Huawei/pom.xml Normal file
View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.markilue.interview</groupId>
<artifactId>Huawei</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -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<int[]>() {
@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<int[]> single = new ArrayList<>();
ArrayList<int[]> 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]<multi.get(multi.size()-1)[1]){
nums[i][0] = multi.get(multi.size()-1)[1];
if(nums[i][1]<nums[i-1][1]){
int[] temp = nums[i];
nums[i]=nums[i-1];
nums[i-1]=temp;
}
}
if(nums[i-1][0]!=nums[i][0])single.add(new int[]{nums[i-1][0],nums[i][0]});
if(nums[i][0]!=nums[i-1][1])multi.add(new int[]{nums[i][0],nums[i-1][1]});
}else {
single.add(nums[i-1]);
}
}
}
/*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();
}
}*/
@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<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0];
}
});
ArrayList<int[]> total = new ArrayList<>();
ArrayList<Integer> 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);
}
}

View File

@ -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<ArrayList<Integer>> 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<Integer> 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<ArrayList<Integer>> edges, int parent, int cur, HashSet<Integer> 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(len<minLen){
minLen=len;
res=new StringBuilder(path);
}
}
for (int i = 0; i < size; i++) {
int child=edges.get(cur).get(i);
if(child==parent)continue;//父节点直接跳过
else {
recur(edges,cur,child,set,len);
}
}
if(path.length()>3){
path.delete(path.length()-3,path.length());
}
}
}

View File

@ -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<List<Integer>> 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<Integer> 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[left-1]&&used[left+1]) {
//是引流点
list.add(nums[left]);
}
left--;
}
int right = i + 1;
boolean flag =true;
while (right < nums.length-1 && !used[right]&&flag) {
//往那边引流
if (nums[right - 1] < nums[right] && nums[right + 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<nums.length&&!used[temp]){
temp++;
}
if(temp<nums.length&&nums[temp]<nums[i]){
list.add(nums[right]);
flag=false;
}
}
flag=!flag;
right++;
}
}
}
System.out.println(result);
}
}