public int Add(int data) { if (pq.Count() == K) { if (data > pq.Peek()) { pq.Dequeue(); //Remove Min pq.Enqueue(data); //Add } } else { pq.Enqueue(data); } return(pq.Peek()); }
//smallest or nearest=>Max Heap public static int[][] KClosest(int[][] points, int K) { PQ <Point> pq = new PQ <Point>(false); // PriorityQueue<Tuple<int,int>> pq1 = new PriorityQueue<Tuple<int,int>>(false); int rows = points.Length; for (int i = 0; i < rows; i++) { // distance[i] = (points[i][0] * points[i][0]) + (points[i][1] * points[i][1]); var p = new Point(points[i][0], points[i][1], i); if (pq.Count() < K) { // pq.Enqueue(distance[i], new Tuple<int,int>(distance[i],i)); pq.Enqueue(p); } else { if (p.CompareTo(pq.Peek()) < 0) //if (distance[i] < pq.Peek().Item1) { pq.Dequeue(); pq.Enqueue(p); } } } var result = new int[K][]; int index = 0; for (int j = 0; j < K; j++) { result[index++] = points[pq.Dequeue().index]; } return(result); }