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