2020年6月29日打卡

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 个确定下标的节点即为结果;这两种解法的描述较为复杂,请自行看该题题解(太困了,捋不明白),或者明天可能会写。

今天有事,虽然还是一题打卡。

你可能感兴趣的:(日常打卡)