class Solution {
public:
void swap(std::vector<int>& nums, int i, int j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
int findKthLargest(std::vector<int>& nums, int k)
{
int start = 0;
int end = nums.size() - 1;
int kb = k;
while (true)
{
int i = start;
int j = end;
int mid = nums[(i + j) / 2];
while (i <= j)
{
while (i < nums.size() && nums[i] < mid)
{
i++;
}
while (j >= 0 && nums[j] > mid)
{
j--;
}
if (i <= j)
{
swap(nums, i, j);
i++;
j--;
}
}
if (end - start <= 1)
{
return nums[nums.size() - kb];
}
if (end - j >= k)
{
start = j + 1;
}
else
{
k = k - (end - j);
end = j;
}
}
return 0;
}
};
public:
void swap(std::vector<int>& nums, int i, int j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
int findKthLargest(std::vector<int>& nums, int k)
{
int start = 0;
int end = nums.size() - 1;
int kb = k;
while (true)
{
int i = start;
int j = end;
int mid = nums[(i + j) / 2];
while (i <= j)
{
while (i < nums.size() && nums[i] < mid)
{
i++;
}
while (j >= 0 && nums[j] > mid)
{
j--;
}
if (i <= j)
{
swap(nums, i, j);
i++;
j--;
}
}
if (end - start <= 1)
{
return nums[nums.size() - kb];
}
if (end - j >= k)
{
start = j + 1;
}
else
{
k = k - (end - j);
end = j;
}
}
return 0;
}
};
评论
发表评论