标签:
利用快排的思想,每次都能得到一个位置mid;
并且我们知道在mid之前的数都是大于nums[mid];
并且我们知道在mid之后的数都是小于nums[mid];
根据K和mid的大小即可继续划分下去;
直到找到目标。
int Adjust(int * nums, int l, int r) {
int K = nums[l];
while (l < r) {
while (l < r && nums[r] <= K) r--;
nums[l] = nums[r];
while (l < r && nums[l] >= K) l++;
nums[r] = nums[l];
}
nums[l] = K;
return l;
}
int QS(int * nums, int l, int r, int k) {
if (l <= r) {
int mid = Adjust(nums, l, r);
if (k == mid) return nums[mid];
if (k < mid) return QS(nums, l, mid - 1, k);
if (k > mid) return QS(nums, mid + 1, r, k);
}
}
int findKthLargest(int* nums, int numsSize, int k) {
return QS(nums, 0, numsSize - 1, k - 1);
}
LeetCode Kth Largest Element in an Array
标签:
原文地址:http://blog.csdn.net/u012925008/article/details/45965627