360笔试第一题贪心思路
思路:让权重和最大,就是要在原数组的权重和的基础上,尽可能的把值比较大的重复的数切分到不同的段中。
代码:
Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); int[] arr = new int[n]; HashMap<Integer,Integer> map = new HashMap<>(); int sum = 0; for (int i = 0; i < n; i++) { arr[i] = in.nextInt(); } Arrays.sort(arr); for (int num : arr) { if (!map.containsKey(num)){ sum += num; } map.put(num,map.getOrDefault(num,0) + 1); } int i = n - 1; while(k > 0){ if (map.get(arr[i]) > 1){ sum += arr[i]; map.put(arr[i],map.get(arr[i]) - 1); k--; } else { i--; } } System.out.println(sum);
贪心可以AC