1. 程式人生 > 其它 >[LeetCode] 215. Kth Largest Element in an Array_Medium tag: Array, Heap

[LeetCode] 215. Kth Largest Element in an Array_Medium tag: Array, Heap

Given an integer arraynumsand an integerk, returnthekthlargest element in the array.

Note that it is thekthlargest element in the sorted order, not thekthdistinct 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: