File tree 1 file changed +19
-11
lines changed
solution/0215.Kth Largest Element in an Array
1 file changed +19
-11
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public int findKthLargest (int [] nums , int k ) {
3
- PriorityQueue <Integer > minHeap = new PriorityQueue <>(k );
4
- for (int e : nums ) {
5
- if (minHeap .size () < k ) {
6
- minHeap .add (e );
7
- } else {
8
- if (minHeap .peek () < e ) {
9
- minHeap .poll ();
10
- minHeap .add (e );
11
- }
3
+ return find (nums , 0 , nums .length - 1 , k - 1 );
4
+ }
5
+
6
+ private int find (int [] nums , int left , int right , int k ) {
7
+ int i = left ;
8
+ int j = right ;
9
+ int index = nums [left ];
10
+ while (i < j ) {
11
+ while (i < j && index >= nums [j ]) j --;
12
+ if (i < j ) {
13
+ nums [i ++] = nums [j ];
14
+ }
15
+ while (i < j && index <= nums [i ]) i ++;
16
+ if (i < j ) {
17
+ nums [j --] = nums [i ];
12
18
}
13
-
14
19
}
15
- return minHeap .peek ();
20
+ nums [i ] = index ;
21
+ if (i > k ) return find (nums , left , i - 1 , k );
22
+ else if (i < k ) return find (nums , i + 1 , right , k );
23
+ else return nums [i ];
16
24
}
17
25
}
You can’t perform that action at this time.
0 commit comments