[LeetCode] 215. Kth Largest Element in an Array_Medium tag: Array, Heap
阿新 • • 發佈:2021-06-28
Given an integer arraynums
and an integerk
, returnthekth
largest element in the array.
Note that it is thekth
largest element in the sorted order, not thekth
distinct element.
Example 1:
Input: nums = [3,2,1,5,6,4], k = 2 Output: 5
Example 2:
Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4
Constraints:
1 <= k <= nums.length <= 104
-104<= nums[i] <= 104
Ideas:
1. sort T: O(n * lgn) S: O(1)
class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: nums.sort() return nums[len(nums) - k]
2. 利用heap, 維持一個size為k的heap,每次insert都是lgk的時間,所以T: O(n * lgk) S: O(k)
class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: return heapq.nlargest(k, nums)[-1]
3. 利用quicksort的思想來快速sort, 這樣來關心最後n - k 的sort的順序。只要保證n - k的數在相應的位置上即可,不用擔心n- k 前面的數到底是不是sort了。
參考quickSort use two pointers to decrease Time into O(n * lgn ) or O(n)
TODO: