华为OD 机试 20220223 我好菜啊
更新:西列了,180及格了,但是年限不够,这个好像是走的社招,校招要320,我21届,大家加油
三道题
第一题:
题目:用数组代表每个人的权重,现在要进行组队权重大于等于N,每个队可以由1人或2人组队,且1个人只能参加1个队,计算可以派出最多的符合要求的团队
输入三行
第一行:代表数组长度
第二行:数组的元素
第三行:最小权重
示例: 5 3 1 5 7 9 8 输出:3 解释:[ 3 5 ] [ 1 7 ] [ 9 ]
我这个只通过了70%的案例
public static void helper1(int size,int[] numbers,int power) {
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < size; i++) {
arrayList.add(numbers[i]);
}
Collections.sort(arrayList);
ArrayList<Integer> indexs = new ArrayList<>();
int count = 0;
for (int i = size-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (arrayList.get(i)>=power) {
count++;
break;
} else {
if (!indexs.contains(j)) {
if (arrayList.get(j) + arrayList.get(i) >=power) {
indexs.add(j);
count++;
break;
}
}
}
}
}
System.out.println(count);
} 输入三行:
第一行:代表数组大小
第二行:数组元素
第三行:代表N
示例1: 5 3 1 5 7 9 2 输出:20 解释:最大两个是7和9,最小的两个是1和3 相加等于20
示例: 5 5 1 5 5 9 2 输出:-1 解释:最大两个是5和9,最小的两个是1和5 存在相同的数返回-1
我这个只通过了90%的案例
第三题:没时间写了,让你实现(add 5 2)(div 2 5)四则运算,操作符号后面可以接多个括号 如(add 5 (div 2 5))
public static void helper2(int size,int[] numbers,int n) {
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < size; i++) {
arrayList.add(numbers[i]);
}
Collections.sort(arrayList);
ArrayList<Integer> buffer = new ArrayList<>();
for (int i = 0; i < n; i++) {
buffer.add(arrayList.get(i));
buffer.add(arrayList.get(arrayList.size()-i-1));
}
HashSet<Integer> set = new HashSet<>(buffer);
if (set.size() != buffer.size()) {
System.out.println(-1);
} else {
int result = 0;
for (int i = 0; i < buffer.size(); i++) {
result+=buffer.get(i);
}
System.out.println(result);
}
} 

查看20道真题和解析