Sample
Sample
class KthLargest {
public static void main(String[] args) {
int k = 3;
int[] nums = {4, 5, 8, 2};
KthLargest obj = new KthLargest(k, nums);
System.out.println(obj.add(3)); // Output: 4
System.out.println(obj.add(5)); // Output: 5
System.out.println(obj.add(10)); // Output: 5
System.out.println(obj.add(9)); // Output: 8
System.out.println(obj.add(4)); // Output: 8
}
private PriorityQueue<Integer> pq;
private int k;
public KthLargest(int k, int[] nums) {
this.k = k;
pq = new PriorityQueue<>();
for (int num : nums) add(num);
}
public int add(int val) {
pq.offer(val);
if (pq.size() > k) pq.poll();
return pq.peek();
}
}
class RottenOranges {
public static void main(String[] args) {
int[][] grid = {{2,1,1}, {1,1,0}, {0,1,1}};
System.out.println(new RottenOranges().orangesRotting(grid)); // Output: 4
}
public int orangesRotting(int[][] grid) {
int rows = grid.length, cols = grid[0].length;
Queue<int[]> q = new LinkedList<>();
int fresh = 0, minutes = 0;
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
if (grid[r][c] == 2) q.offer(new int[]{r, c});
if (grid[r][c] == 1) fresh++;
}
}
int[][] dirs = {{1,0},{-1,0},{0,1},{0,-1}};
while (!q.isEmpty() && fresh > 0) {
int size = q.size();
for (int i = 0; i < size; i++) {
int[] cell = q.poll();
for (int[] d : dirs) {
int x = cell[0] + d[0], y = cell[1] + d[1];
if (x >= 0 && x < rows && y >= 0 && y < cols && grid[x][y] == 1) {
grid[x][y] = 2;
q.offer(new int[]{x, y});
fresh--;
}
}
}
minutes++;
}
return fresh == 0 ? minutes : -1;
}
}