forked from rampatra/Algorithms-and-Data-Structures-in-Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKthLargestElement.java
63 lines (53 loc) · 1.39 KB
/
KthLargestElement.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.rampatra.arrays;
import com.rampatra.sorting.MergeSort;
import com.rampatra.base.MaxHeap;
import java.util.Arrays;
/**
* Created by IntelliJ IDEA.
*
* @author rampatra
* @since 8/1/15
* @time: 11:26 PM
*/
public class KthLargestElement {
/**
* Naive approach.
* <p/>
* Time complexity: O(n log n)
*
* @param a
* @param k
* @return
*/
public static int getKthLargestElementNaive(int[] a, int k) {
if (k >= a.length) return -1;
a = MergeSort.mergeSort(a);
return a[a.length - k];
}
/**
* Determines the kth largest element by building a max heap
* k times removing the root each time.
*
* @param a
* @param k
* @return
*/
public static int getKthLargestElement(int[] a, int k) {
MaxHeap maxHeap = new MaxHeap(a);
maxHeap.buildMaxHeap();
while (true) {
if (k == 1) break;
maxHeap.extractMax();
k--;
}
return maxHeap.findMax();
}
public static void main(String[] args) {
int[] ar = new int[]{2, 4, 5, 7, 1, 8, 9};
System.out.println(Arrays.toString(ar));
System.out.println(getKthLargestElementNaive(ar, 3));
System.out.println(Arrays.toString(ar));
System.out.println(getKthLargestElement(ar, 3));
System.out.println(Arrays.toString(ar));
}
}