美文网首页程序员
力扣 215 数组中的第K个最大元素

力扣 215 数组中的第K个最大元素

作者: zhaojinhui | 来源:发表于2020-09-03 11:53 被阅读0次

    题意:给定一个数组,找到第k个最大的元素

    思路:利用快速排序,快速定位第k大的元素,具体可看代码注释

    思想:快速排序

    复杂度:时间O(nlogn),空间O(n)

    class Solution {
        public int findKthLargest(int[] nums, int k) {
            return find(nums, 0, nums.length-1, k);
        }
        
        int find(int[] nums, int s, int e, int k) {
            // 设定flag,默认用nums[s]
            int flag = nums[s];
            int ss = s;
            int ee = e;
            while(ss<ee) {
                // 从后向前找到第一个比flag大的数
                while(ss<ee && nums[ee] <= flag)
                    ee--;
                // 交换flag和比flag大的数
                nums[ss] = nums[ee];
                nums[ee] = flag;
                // 从前向后找到第一个小于等于flag的数
                while(ss<ee && nums[ss] > flag)
                    ss++;
                // 交换flag和比flag小的数
                nums[ee] = nums[ss];
                nums[ss] = flag;
            }
            // 返回结果
            if(ss + 1 == k)
                return nums[ss];
            // 找到的数比k小,更新s
            else if(ss + 1 < k)
                return find(nums, ss+1, e, k);
            // 找到的数比k大,更新e
            else 
                return find(nums, s, ss-1, k);
        }
    }
    

    相关文章

      网友评论

        本文标题:力扣 215 数组中的第K个最大元素

        本文链接:https://www.haomeiwen.com/subject/csvnsktx.html