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

LeetCode 215 : Kth Largest Element in an Array

时间:2015-10-21 22:33:55      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

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.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

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

 

最简单的想法:先排序,然后倒数k个元素就是

时间复杂度:O(nlogn)

public class Solution {
    public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        return nums[nums.length-k];
    }
}

 

优化:quicksort 中 partition 的思想

就像quickselect一样,时间复杂度应该是 O(n)

public class Solution {
    public int findKthLargest(int[] nums, int k) {
        return helper(nums, 0, nums.length-1, k);
    }
    
    public int helper(int[] nums, int lo, int hi, int k) {
        // if (lo == hi)
        //     return nums[lo];
            
        int partition = nums[lo];
        int j = hi;
        for (int i = lo+1; i <= j;) {
            while (i <= hi && nums[i] < partition) i++;
            while (j >= lo && nums[j] > partition) j--;
            if (i <= j) {
                swap(nums, i, j);
                i++; j--;
            }
        }
        swap(nums, j, lo);

        if (k == hi - j + 1)
            return nums[j];
        if (k < hi - j + 1)
            return helper(nums, j + 1, hi, k);
        else
            return helper(nums, lo, j - 1, k - (hi - j + 1));
    }
    
    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

 

 

2015-10-21

LeetCode 215 : Kth Largest Element in an Array

标签:

原文地址:http://www.cnblogs.com/whuyt/p/4898495.html

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