leetcode寻找第k大的值
寻找第k大的值
题目链接:![https://leetcode.cn/problems/kth-largest-element-in-an-array/]
解题思路:该题对时间复杂度要求较高,对整个数组进行排序之后再求解在时间上划不来。只要使得数组局部有序即可。这里采用快速排序的方法找到第k大的元素。
class Solution {
public://划分的过程,采用挖坑法进行划分static int partition(std::vector<int>& nums, int beg, int end) {int pivot = nums[beg];while (beg < end) {while (beg < end && nums[end] > pivot)end--;if (beg < end)nums[beg++] = nums[end];while (beg < end && nums[beg] <= pivot)beg++;if (beg < end)nums[end--] = nums[beg];}nums[beg] = pivot;return beg;}static void quickSort(std::vector<int>& nums, int beg, int end, int k) {if (beg < end) {int mid = partition(nums, beg, end);if (mid == k) //检查基准元素的下标以决定向哪边二分return;else if (mid > k)return quickSort(nums, beg, mid - 1, k);elsereturn quickSort(nums, mid + 1, end, k);}}int findKthLargest(std::vector<int>& nums, int k) {quickSort(nums, 0, nums.size() - 1, nums.size() - k);return nums[nums.size() - k];}
};
