int partition (int *a, int p, int r);
void swap (int *a, int *b);
void kth (int *a, int p, int r, int k);
int findKthLargest(int* nums, int numsSize, int k)
{
kth (nums, 0, numsSize - 1, numsSize - k);
return nums[numsSize - k];
}
void kth (int *a, int p, int r, int k)
{
int q = partition (a, p, r);
if (q == k)
return;
else if (q > k)
kth (a, p, q - 1, k);
else
kth (a, q + 1, r, k);
}
int partition (int *a, int p, int r)
{
int x = a[r];
int i = p - 1;
for (int j = p; j < r; ++j)
{
if (a[j] <= x)
swap (&a[++i], &a[j]);
}
swap (&a[++i], &a[r]);
return i;
}
void swap (int *a, int *b)
{
if (a == b)
return;
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
Kth Largest Element in an Array
最新推荐文章于 2022-07-02 13:48:51 发布