数组中第K个最大元素-LeetCode问题

时间:2019-10-14 12:05:04

标签: java queue

我一直在尝试解决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应该是数组中的第二大元素? 如果我搞砸了,请纠正我。

1 个答案:

答案 0 :(得分:3)

  

我只是不明白,为什么1应该是数组中的第二大元素?

如果数组仅包含两个元素-12,则2是最大的,而1是第二大的。它也是最小的一个,但这与问题无关。

您需要考虑一个更好的解决方案。仅当遇到新的“ max”元素时,当前算法才插入队列。但是,如果您获得的第一个元素是最大的元素怎么办?您只需将其输入队列,然后错过所有其他队列。

此外,为什么要使用队列?也许有序集合在这里会更有用?