File tree 1 file changed +7
-37
lines changed
1 file changed +7
-37
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public List <Integer > findClosestElements (int [] arr , int k , int x ) {
3
- if (k == 0 || arr .length == 0 ) {
4
- return new ArrayList <>();
5
- }
6
- int [] diffArr = new int [arr .length ];
7
- int minDiff = Integer .MAX_VALUE ;
8
- int minDiffIdx = -1 ;
9
- for (int i = 0 ; i < arr .length ; i ++) {
10
- diffArr [i ] = Math .abs (arr [i ] - x );
11
- if (minDiff > diffArr [i ]) {
12
- minDiff = diffArr [i ];
13
- minDiffIdx = i ;
14
- }
15
- }
16
- int left = minDiffIdx - 1 ;
17
- int right = minDiffIdx + 1 ;
18
- List <Integer > list = new ArrayList <>();
19
- list .add (arr [minDiffIdx ]);
20
- k --;
21
- while (k > 0 ) {
22
- if (left >= 0 && right < arr .length ) {
23
- if (diffArr [left ] <= diffArr [right ]) {
24
- list .add (arr [left --]);
25
- }
26
- else {
27
- list .add (arr [right ++]);
28
- }
29
- }
30
- else if (left >= 0 && right == arr .length ) {
31
- list .add (arr [left --]);
32
- }
33
- else {
34
- list .add (arr [right ++]);
35
- }
36
- k --;
37
- }
38
- Collections .sort (list );
39
- return list ;
3
+ return Arrays .stream (arr )
4
+ .mapToObj (e -> new int []{e , Math .abs (e - x )})
5
+ .sorted ((o1 , o2 ) -> (o1 [1 ] - o2 [1 ] != 0 ) ? (o1 [1 ] - o2 [1 ]) : o1 [0 ] - o2 [0 ])
6
+ .map (e -> e [0 ])
7
+ .limit (k )
8
+ .sorted ()
9
+ .collect (Collectors .toList ());
40
10
}
41
11
}
You can’t perform that action at this time.
0 commit comments