Skip to content

Commit 5c47db4

Browse files
committed
Time: 19 ms (93.84%), Space: 61.3 MB (97.68%) - LeetHub
1 parent d483d80 commit 5c47db4

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

1014-k-closest-points-to-origin/1014-k-closest-points-to-origin.js

+41-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,45 @@
33
* @param {number} k
44
* @return {number[][]}
55
*/
6-
var kClosest = function(points, k) {
7-
let arear = new Array(points.length).fill(0);
8-
let pos = 0;
9-
for (const point of points) {
10-
let [x,y] = point;
11-
arear[pos++] = [x**2 + y**2, point];
6+
var kClosest = function (points, k) {
7+
8+
const result = quickSelect();
9+
return result;
10+
11+
function quickSelect() {
12+
let right = points.length-1;
13+
let left = 0;
14+
let pivotIndex = points.length;
15+
while (pivotIndex !== k) {
16+
pivotIndex = partition(points, left, right)
17+
if (pivotIndex < k) {
18+
left = pivotIndex
19+
} else {
20+
right = pivotIndex - 1;
21+
}
22+
}
23+
return points.slice(0, k);
1224
}
13-
arear.sort((a,b)=> a[0] - b[0]);
14-
return arear.slice(0,k).map(e => e[1]);
15-
};
25+
26+
function partition(points, left, right) {
27+
let pivot = points[Math.floor((right + left) / 2)];
28+
let pivotArea = calArea(pivot);
29+
while (left < right) {
30+
if (calArea(points[left]) >= pivotArea) {
31+
[points[left], points[right]] = [points[right], points[left]];
32+
right--;
33+
} else {
34+
left++;
35+
}
36+
}
37+
if (calArea(points[left]) < pivotArea) {
38+
left++;
39+
}
40+
return left;
41+
}
42+
43+
function calArea (point) {
44+
const [x,y] = point;
45+
return x**2+ y**2
46+
}
47+
};

0 commit comments

Comments
 (0)