Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit db263fc

Browse files
authored
Update 0973-k-closest-points-to-origin.cs
1 parent f1f6e7b commit db263fc

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed
Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,21 @@
11
public class Solution {
2-
// Closest to origin minHeap
3-
private PriorityQueue<int[], double> pq;
4-
private int size;
5-
// T: O(Max(M, KLogM)), S: O(k)
62
public int[][] KClosest(int[][] points, int k) {
7-
pq = new PriorityQueue<int[], double>();
8-
size = k;
9-
10-
AddToPriorityQueue(points);
11-
12-
return Closest();
13-
}
14-
15-
public class MaxHeap : IComparer<double>{
16-
public int Compare(double x, double y){
17-
if( x< y) return 1;å
18-
else if (x > y) return -1;
19-
else return 0;
20-
}
21-
}
22-
23-
// T: O(M)
24-
private void AddToPriorityQueue(int[][] points){
25-
foreach(var point in points){
26-
//var value = (double) Math.Sqrt(point[0]*point[0] + point[1]*point[1]);
27-
var value = (double) point[0]*point[0] + point[1]*point[1];
28-
pq.Enqueue(point, value);
29-
30-
31-
}
32-
}
33-
34-
// T: O(KLogM)
35-
private int[][] Closest(){
36-
var result = new List<int[]>();
37-
while(size > 0){
38-
result.Add(pq.Dequeue());
39-
size--;
3+
var items = points.Select(point => {
4+
long x = point[0];
5+
long y = point[1];
6+
7+
return (point, x * x + y * y);
8+
});
9+
10+
int[][] result = new int[k][];
11+
// T: O(n)
12+
PriorityQueue<int[], long> queue = new(items);
13+
14+
// T: O(k log(n))
15+
for (int i = 0; i < k; i++) {
16+
result[i] = queue.Dequeue();
4017
}
41-
42-
return result.ToArray();
18+
19+
return result;
4320
}
4421
}

0 commit comments

Comments
 (0)