我一直在尝试解决Kth Largest Element in an Array
这是我的代码:
public static int findKthLargest(int[] nums, int k) {
Queue<Integer> q = new LinkedList<>();
int max = Integer.MIN_VALUE;
for(int i=0; i< nums.length; i++){
if(nums[i]>=max){
max = nums[i];
if(q.size() <k)
q.add(max);
else{
q.poll();
q.add(max);
}
}
}
return q.peek();
}
我的代码背后的主要思想是,我将最大值一直存储在长度为K的队列中,并且在遍历数组中的所有值之后,我返回第一个Item,因为它是第K个最大值元素。
但是在以下测试用例上失败: 输入:数组= [2,1] K = 2 -预期产量:1 -我的输出:2
我只是不明白,为什么1应该是数组中的第二大元素? 如果我搞砸了,请纠正我。
答案 0 :(得分:3)
我只是不明白,为什么1应该是数组中的第二大元素?
如果数组仅包含两个元素-1
和2
,则2
是最大的,而1
是第二大的。它也是最小的一个,但这与问题无关。
您需要考虑一个更好的解决方案。仅当遇到新的“ max”元素时,当前算法才插入队列。但是,如果您获得的第一个元素是最大的元素怎么办?您只需将其输入队列,然后错过所有其他队列。
此外,为什么要使用队列?也许有序集合在这里会更有用?