Find K-th largest element in N arrays.
Example
Example 1:
Input:
k=3, [[9,3,2,4,7],[1,2,3,4,8]]
Output:
7
Explanation:
the 3rd largest element is 7
Example 2:
Input:
k = 2, [[9,3,2,4,8],[1,2,3,4,2]]
Output:
8
Explanation:
the 1st largest element is 9, 2nd largest element is 8, 3rd largest element is 4 and etc.
Notice
You can swap elements in the array
Code (Java):public class Solution { /** * @param arrays: a list of array * @param k: An integer * @return: an integer, K-th largest element in N arrays */ public int KthInArrays(int[][] arrays, int k) { // sort it each array first// // for (int i = 0; i < arrays.length; i++) { Arrays.sort(arrays[i]); } // step 2: put the head of each array into a max heap // PriorityQueue<Pair> pq = new PriorityQueue<>(new MyPQComparator()); for (int i = 0; i < arrays.length; i++) { if (arrays[i] != null && arrays[i].length > 0) { pq.offer(new Pair(i, arrays[i].length - 1, arrays[i][arrays[i].length - 1])); } } // step 3: poll k elements from the pq // int ans = -1; for (int i = 0; i < k; i++) { Pair curr = pq.poll(); if (i == k - 1) { ans = curr.val; } if (curr.col - 1 >= 0) { pq.offer(new Pair(curr.row, curr.col - 1, arrays[curr.row][curr.col - 1])); } } return ans; } } class Pair { public int row; public int col; public int val; public Pair(int row, int col, int val) { this.row = row; this.col = col; this.val = val; } } class MyPQComparator implements Comparator<Pair> { @Override public int compare(Pair a, Pair b) { return b.val - a.val; } }
No comments:
Post a Comment