华为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); } }