215. 数组中的第K个最大元素,解法求解

这个题不可以根据它给出的数据范围,我们构建一个和其数值大小的数组,对给出的数计数,然后倒着找第k大的元素吗。我看题解全是快排、桶排,没有人这么写,笔试、面试的时候,可不可用数组的方法啊。

我的解法如下:

class Solution {
    public int findKthLargest(int[] nums, int k) {
        int[] arry = new int[20010];
        for(int i = 0; i < nums.length; i++){
            arry[nums[i] + 10000] ++;
        }
        for(int i = 20009; i >= 0; i--){
            k -= arry[i];
            if(k <= 0) {
                return i - 10000;
            }
        }

        return 0;
    }
}

速度也还行

#算法##笔试#
全部评论
可能就和,链表转数组然后用数组做题再转链表一样,很简单但是不是他们想要的
4 回复
分享
发布于 03-09 11:45 安徽
不行,我之前面美团就是这么写的,面试官跟我说你这写法太极客了,我要考察的是数据结构,然后给我挂了
3 回复
分享
发布于 03-09 00:59 安徽
滴滴
校招火热招聘中
官网直投
我记得这个应该是堆排序排k次,堆顶元素就是第k 大的呀,C++可以直接用stl 的priority queue,难道是我有什么理解错误吗
2 回复
分享
发布于 03-11 16:14 广东
你这不就是桶排吗
1 回复
分享
发布于 03-10 09:22 广东
老老实实按照主流写法去写,面试官想考察啥就给他看啥。真想表达自己的看法可以在正常写完之后再说一下自己其他的思路
1 回复
分享
发布于 03-25 10:20 湖南
用 priority queue/heap 就是小顶堆可以
点赞 回复
分享
发布于 03-24 03:29 美国
这样的问题是需要开一个额外的O(n)的数组,如果你的数据大到单个数组无法存下,这种办法是没有用的。但是如果用堆排,是不存在这个问题的。
点赞 回复
分享
发布于 03-28 12:21 美国

相关推荐

4 2 评论
分享
牛客网
牛客企业服务