码迷,mamicode.com
首页 > 其他好文 > 详细

49.Kth Largest Element in an Array

时间:2019-06-26 01:03:25      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:lag   描述   --   tin   sort   思路分析   output   转换   out   

Level:

??Medium

题目描述:

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Example 1:

Input: [3,2,1,5,6,4] and k = 2
Output: 5

Example 2:

Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4

Note:
You may assume k is always valid, 1 ≤ k ≤ array‘s length.

思路分析:

??题目要求找出未排序数组的第K个最大的数,我们可以转换为找从小到大排列的第n-k个数。我们使用快速排序的partition函数,partition函数选择一个flag值,将数组中小于flag的值放在flag左边,将大于flag的值放在右边,我们要找第n-k个数,可以通过判断flag的位置确定,如果flag的位置正好是n-k,那我们找到答案,否则我们可以将范围缩小继续查找。

代码:

public class Solution{
    public int findKthLargest(int[] nums,int k){
        int n=nums.length-k;
        int low=0;
        int high=nums.length-1;
        int t;
        while(low<high){
            t=partition(nums,low,high);
            if(t>n){
                high=t-1;
            }else if(t<n){
                low=t+1;
            }else{
                break;
            }
        }
        return nums[n];
    }
    public int partition(int []nums,int low,int high){
        int key=nums[low];
        while(low<high){
            while(low<high&&nums[high]>=key){
                high--;
            }
            nums[low]=nums[high];
            while(low<high&&nums[low]<=key){
                low++;
            }
            nums[high]=nums[low];
        }
        nums[low]=key;
        return low;
    }
}

49.Kth Largest Element in an Array

标签:lag   描述   --   tin   sort   思路分析   output   转换   out   

原文地址:https://www.cnblogs.com/yjxyy/p/11087422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!