Skip to content

Commit f0769c9

Browse files
authored
Update Find K Closest Elements.java
1 parent c50fecf commit f0769c9

File tree

1 file changed

+7
-37
lines changed

1 file changed

+7
-37
lines changed

Medium/Find K Closest Elements.java

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,11 @@
11
class Solution {
22
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());
4010
}
4111
}

0 commit comments

Comments
 (0)