您的位置:首页 > 其它

Kth Largest Element in an Array

2016-07-02 12:03 295 查看
Find K-th largest element in an array.

Notice

You can swap elements in the array

Example

In array
[9,3,2,4,8]
, the 3rd largest element is
4
.

In array
[1,2,3,4,5]
, the 1st largest element is
5
, 2nd largest element is
4
, 3rd largest element is
3
and etc.

分析:

使用partion把array分成两组,然后看中间那个数在哪个位置。然后再确定是继续在左半部分找还是在右半部分找。

public class Solution {
public int findKthLargest(int[] nums, int k) {
if (nums == null || nums.length == 0 || k > nums.length) return -1;

int start = 0, end = nums.length - 1;

while (start <= end) {
int p = partition(nums, start, end);
if (p == nums.length - k) {
return nums[p];
} else if (p < nums.length - k) {
start = p + 1;
} else {
end = p - 1;
}
}
return -1;
}

private int partition(int[] nums, int start, int end) {
int p = start;
for (int i = start; i <= end - 1; i++) {
if (nums[i] < nums[end]) {
swap(nums, p, i);
p++;
}
}
swap(nums, p, end);
return p;
}

private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}


转载请注明出处:cnblogs.com/beiyeqingteng/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: