1
+ import heapq
2
+
3
+ """
4
+ https://leetcode.com/problems/kth-largest-element-in-an-array/
5
+
6
+ Strat: Use a heap. Building it with the built-in library (documentation:
7
+ https://docs.python.org/2/library/heapq.html#heapq.heapify). After it's
8
+ built, just remove (nums - k) numbers from it. The last number you
9
+ remove will be the k-th largest number.
10
+
11
+ Can also use QuickSelect, with average runtime of O(n), but it's not guranteed
12
+ https://en.wikipedia.org/wiki/Quickselect
13
+ """
14
+
15
+ class Solution (object ):
16
+ def findKthLargest (self , nums , k ):
17
+ """
18
+ :type nums: List[int]
19
+ :type k: int
20
+ :rtype: int
21
+ """
22
+ heapq .heapify (nums ) #turn nums from a list into a min heap
23
+
24
+ for _ in range (len (nums ) + 1 - k ):
25
+ elem = heapq .heappop (nums )
26
+
27
+ return elem
28
+
29
+ def findKthLargest (self , nums , k ):
30
+ """
31
+ :type nums: List[int]
32
+ :type k: int
33
+ :rtype: int
34
+ """
35
+ heapq .heapify (nums )
36
+
37
+ k_largest = heapq .nlargest (k , nums ) #grab the list of k largest nums
38
+ return k_largest [- 1 ] #last elem of nlargest
39
+
40
+
41
+ """
42
+ A nice quick select I found
43
+ """
44
+ # from random import randint
45
+
46
+ # class Solution(object):
47
+ # def findKthLargest(self, nums, k):
48
+ # """
49
+ # :type nums: List[int]
50
+ # :type k: int
51
+ # :rtype: int
52
+ # """
53
+ # def partition(p, r):
54
+ # x = nums[r]
55
+ # i = p-1
56
+ # for j in range(p,r):
57
+ # if nums[j] < x:
58
+ # i += 1
59
+ # nums[i], nums[j] = nums[j], nums[i]
60
+ # nums[i+1],nums[r] = nums[r], nums[i+1]
61
+ # return i+1
62
+
63
+ # def random_partition(p,r):
64
+ # ri = randint(p,r)
65
+ # nums[ri], nums[r] = nums[r], nums[ri]
66
+ # return partition(p, r)
67
+
68
+ # def select(p, r, k):
69
+ # if p == r:
70
+ # return nums[p]
71
+ # q = random_partition(p, r)
72
+ # i = q-p+1
73
+ # if i == k:
74
+ # return nums[q]
75
+ # elif k < i:
76
+ # return select(p, q-1, k)
77
+ # else:
78
+ # return select(q+1, r, k-i)
79
+
80
+ # return select(0, len(nums)-1, len(nums)-k+1)
81
+
82
+
83
+
84
+ sol = Solution ().findKthLargest ([1 ,4 ,6 ,3 ,2 ], 2 )
85
+ print (sol )
0 commit comments