Skip to content

Commit 4183994

Browse files
authored
Update Solution3.ts
1 parent 320f26d commit 4183994

File tree

1 file changed

+11
-23
lines changed
  • solution/0900-0999/0973.K Closest Points to Origin

1 file changed

+11
-23
lines changed
Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,19 @@
11
function kClosest(points: number[][], k: number): number[][] {
2-
if (k === points.length) return points;
3-
4-
const distance = points.map(([x, y]) => x ** 2 + y ** 2);
5-
let indexes = points.map((_, i) => i);
6-
let [l, r] = [0, Math.max(...distance)];
7-
const res: number[] = [];
8-
9-
while (k) {
2+
const dist = points.map(([x, y]) => x * x + y * y);
3+
let [l, r] = [0, Math.max(...dist)];
4+
while (l < r) {
105
const mid = (l + r) >> 1;
11-
12-
const closer: number[] = [];
13-
const farther: number[] = [];
14-
for (const i of indexes) {
15-
if (distance[i] <= mid) closer.push(i);
16-
else farther.push(i);
6+
let cnt = 0;
7+
for (const d of dist) {
8+
if (d <= mid) {
9+
++cnt;
10+
}
1711
}
18-
19-
if (closer.length > k) {
12+
if (cnt >= k) {
2013
r = mid;
21-
indexes = closer;
2214
} else {
23-
l = mid;
24-
k -= closer.length;
25-
res.push(...closer);
26-
indexes = farther;
15+
l = mid + 1;
2716
}
2817
}
29-
30-
return res.map(i => points[i]);
18+
return points.filter((_, i) => dist[i] <= l);
3119
}

0 commit comments

Comments
 (0)