ps:思路供大家参考,有更好的思路也欢迎评论区分享。
第一题:
思路:因为题目有条件限制,所以不用做第一个和最后一个的特殊处理,前后数组排序
public class Main01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] leftArr = new int[N]; Arrays.fill(leftArr,Integer.MAX_VALUE); int[] rightArr = new int[N]; Arrays.fill(rightArr,Integer.MAX_VALUE); // 记录企鹅所在的位置 int index = -1; for (int i = 0; i < N; i++) { leftArr[i] = scanner.nextInt(); if (leftArr[i] == -1) { index = i; break; } } leftArr[index] = Integer.MAX_VALUE; for (int i = 0; i < N; i++) { rightArr[i] = scanner.nextInt(); if (index + i == N - 2) { break; } } Arrays.sort(leftArr); Arrays.sort(rightArr); System.out.println(leftArr[0] + rightArr[0]); scanner.close(); } }
第二题:
思路:主要是分不同的情况来算最小
public class Main02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] arr_a = new int[N]; int[] arr_b = new int[N]; long result = 0; for (int i = 0; i < N; i++) { arr_a[i] = scanner.nextInt(); } for (int i = 0; i < N; i++) { arr_b[i] = scanner.nextInt(); } for (int i = 0; i < N; i++) { int a = arr_a[i]; int b = arr_b[i]; if ((a >= 0 && b >= 0) || (a < 0 && b < 0)) { result += Math.abs((a - b)); } else { result += Math.abs((a + b)); } } System.out.println(result); scanner.close(); } }
第三题:
思路:分偶数和奇数两种情况,有许多是相同的,比如总的方案数都是n - 1,需要注意的是例如10的10/2 = 5 和 9 / 2 = 4需要做的是不同的处理,第一个是减少一个方案,第二个则需要减去两个方案,在代码中的flag做处理。
public class Main03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { // 存放Index的map Map<Integer,Integer> map = new HashMap<>(); int N = scanner.nextInt(); int[] arr = new int[N]; for (int i = 0; i < N; i++) { arr[i] = scanner.nextInt(); } // 禁着点 int cant = scanner.nextInt(); // 生成禁着点的总方案 int total = cant - 1; // 去重复 int[] array = Arrays.stream(arr) .distinct().toArray(); // 以后用array Arrays.sort(array); // 去重复后的数组的长度 int len = array.length; boolean flag = false; for (int i = 0; i < len; i++) { if (array[i] >= cant) { break; } if (array[i] == cant / 2) { flag = true; } if (!map.containsKey(cant - array[i])) { map.put(array[i],i); } } total -= 2 * map.size(); if (cant % 2 == 0 && flag) { total += 1; } System.out.println(total); }catch (Exception e) { e.printStackTrace(); }finally { scanner.close(); } } }
PS:选择题真的不会
#科大讯飞##科大讯飞信息集散地#