第三题想到了按nums2排序, 优先队列维护最大值,结果不知道哪里写的有问题WA
//错误的代码
class Solution {
public long maxScore(int[] nums1, int[] nums2, int k) {
int n = nums1.length;
int[][] nums = new int[n][2];
for(int i = 0; i < n; ++i){
nums[i][0] = nums1[i];
nums[i][1] = nums2[i];
}
Arrays.sort(nums, (a, b) -> b[1] - a[1]);
PriorityQueue<Integer> q = new PriorityQueue<Integer>();
int i = 0;
long sum = 0;
int min = Integer.MAX_VALUE;
while(k > 0){
sum += nums[i][0];
min = Math.min(min, nums[i][1]);
q.offer(nums[i][0]);
k--;
i++;
}
long ans = 0;
ans = sum * min;
for(; i < n; ++i){
if((long)(sum - q.peek() + nums[i][0]) * nums[i][1] >= ans){
sum = sum - q.poll() + nums[i][0];
q.offer(nums[i][0]);
ans = sum * nums[i][1];
}
}
return ans;
}
}然后就是这个用例一直过不去,调到最后也没调出来。

感觉还是题目做的少了,一些错误都看不出来,之后还是要努力刷题
明早看看大佬的题解看看错在哪了吧