File tree Expand file tree Collapse file tree 1 file changed +11
-23
lines changed
solution/0900-0999/0973.K Closest Points to Origin Expand file tree Collapse file tree 1 file changed +11
-23
lines changed Original file line number Diff line number Diff line change 1
1
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 ) {
10
5
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
+ }
17
11
}
18
-
19
- if ( closer . length > k ) {
12
+ if ( cnt >= k ) {
20
13
r = mid ;
21
- indexes = closer ;
22
14
} else {
23
- l = mid ;
24
- k -= closer . length ;
25
- res . push ( ...closer ) ;
26
- indexes = farther ;
15
+ l = mid + 1 ;
27
16
}
28
17
}
29
-
30
- return res . map ( i => points [ i ] ) ;
18
+ return points . filter ( ( _ , i ) => dist [ i ] <= l ) ;
31
19
}
You can’t perform that action at this time.
0 commit comments