selectK这样的实现方式出错在哪里呢
public int findKthLargest(int[] arr, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < k; i++) {
pq.enqueue(arr[i]);
}
for (int i = k; i <arr.length ; i++) {
if (!pq.isEmpty()&&arr[i] > pq.getFront()) {
pq.dequeue();
pq.enqueue(arr[i]);
}
}
int[] res = new int[k];
for (int i = 0; i < k; i++) {
res[i] = pq.dequeue();
}
return res[k];
}
28
收起
正在回答
1回答
我不确定你的代码是否还有别的问题,但最基本的,res 的大小只有 k,其索引是 0 到 k - 1,res[k] 数组越界。
请仔细调试你的代码,用小数据量单步跟踪测试,看看你的程序每一步执行后,每一个变量在怎么变化,和你的思考是否一样?如果不一样,自己的思考哪里错了?切记:正确的程序和对程序更深刻的理解是调试出来的,不是看出来的。进步就再这个过程中。
加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星