215.Kth Largest Element in an Array

数组中第k大的元素


215.Kth Largest Element in an Array_第1张图片

两种思想:

1.首先是直接排序,调用sort方法实现

  • java
class Solution {
    public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        return nums[nums.length-k];
    }
}
  • javascript
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
     nums.sort(sortNumber);
        return nums[nums.length-k];
};

function sortNumber(a,b){
    return a-b;
}

2.利用快速排序法的思想实现

  • 回顾快速排序法
private void quicksort(int[] list,int start,int end) {
        //记住必须end>start
        if(end>=start){
            int piord=list[start];
            int low=start+1;
            int high=end;
            while(lowpiord)
                    high--;
                if(lowstart&&list[high]>=piord)
                high--;
            if(list[high]

思想:重点是快速排序算法一次定一个位置,如果定下的位置就是n-k(从小到大排,n-k的位置就是第k大的位置),直接返回n-k的内容,如果定下的位置n-k,就要在左边进行快排。

  • java实现
class Solution {
    public int findKthLargest(int[] nums, int k) {
       return findKthLargest(nums,0,nums.length-1,k);   
    }
    
    public int findKthLargest(int[] nums,int start,int end,int k){
        if(start<=end){
            int pivot=nums[start];
            int low=start+1;
            int high=end;
            while(lowpivot)
                    high--;
                if(low=pivot)
                high--;
            if(nums[high]
  • javascript实现
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    return findK(nums,0,nums.length-1,k);
};

var findK=function(nums,start,end,k){
    //注意,必须有等号,应对只有一个元素的情况
    if(start<=end){
        var pivot=nums[start];
        var low=start+1;
        var high=end;
        while(lowpivot)
                high--;
            if(lowstart&&nums[high]>=pivot)
            high--;
        if(nums[high]

你可能感兴趣的:(215.Kth Largest Element in an Array)