您的位置:首页 > 其它

Leetcode 215. Kth Largest Element in an Array

2017-04-24 07:07 316 查看
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.

思路是运用quick selection 和 quick sort 很像。

1、把数组里的一个数设为pivot, 把小于pivot的数放在左边,把大于pivot的数放在右边

2、比较k和left的大小,如果k大的话,就查找右半边,如果k小的话,就查找左半边
public class Solution {
public int findKthLargest(int[] nums, int k) {
return findKthLargest(nums, 0, nums.length - 1, nums.length - k);
}

public int findKthLargest(int[] nums, int start, int end, int k) {
int pivot = nums[end];
int left = start;
for (int i = start; i < end; i++) {
if (nums[i] <= pivot) swap(nums, left++, i);
}
swap(nums,left,end);
if (left == k) return nums[left];
else if (left < k) return findKthLargest(nums, left + 1, end, k);
else return findKthLargest(nums, start, left - 1, k);
}

public void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: