Leetcode 215. 数组中的第K个最大元素
题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
本题核心在于排序,本题目前没有发现排序外的解法,那核心就是如何降低排序的复杂度。
冒泡排序可以作为一种解法,但 O(n2) 的时间复杂度有点不太好,经同学尝试可以通过。
我采用的是C++自带的 sort 排序,sort本身是如何排序的我并不非常清楚,但是时间复杂度可以保持在 O(nlogn) 以内,相较来说肯定比上一种要好。
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
return nums[nums.size() - k];
}
题解还提供了两种较为优秀的方法,其一是采用堆排序,然后删除 x 个节点来获得结果,时间复杂度为 O(n + klogn),另一种方法是根据快速排序的特性,在第 k 个确定下标的节点即为结果;这两种解法的描述较为复杂,请自行看该题题解(太困了,捋不明白),或者明天可能会写。
今天有事,虽然还是一题打卡。