Skip to content

Commit f6933aa

Browse files
Create 658. 找到 K 个最接近的元素.md
1 parent 9e3cbbe commit f6933aa

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Diff for: Sort/658. 找到 K 个最接近的元素.md

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#### 658. 找到 K 个最接近的元素
2+
3+
难度:中等
4+
5+
---
6+
7+
给定一个 **排序好** 的数组 `arr` ,两个整数 `k``x` ,从数组中找到最靠近 `x`(两数之差最小)的 `k` 个数。返回的结果必须要是按升序排好的。
8+
9+
整数 `a` 比整数 `b` 更接近 `x` 需要满足:
10+
11+
* `|a - x| < |b - x|` 或者
12+
* `|a - x| == |b - x|``a < b`
13+
14+
**示例 1:**
15+
16+
```
17+
输入:arr = [1,2,3,4,5], k = 4, x = 3
18+
输出:[1,2,3,4]
19+
```
20+
21+
**示例 2:**
22+
23+
```
24+
输入:arr = [1,2,3,4,5], k = 4, x = -1
25+
输出:[1,2,3,4]
26+
```
27+
28+
**提示:**
29+
30+
* `1 <= k <= arr.length`
31+
* `1 <= arr.length <= 10^4`
32+
* `arr` 按 **升序** 排列
33+
* `-10^4 <= arr[i], x <= 10^4`
34+
35+
---
36+
自定义排序:
37+
38+
将数组的每个值与 `x` 的差的绝对值进行重新排序,得到的前 `k` 个结果再重新排序即可得到最后答案。
39+
40+
41+
```Go
42+
func findClosestElements(arr []int, k int, x int) []int {
43+
sort.Slice(arr, func(i, j int) bool {
44+
if abs(arr[i] - x) != abs(arr[j] - x){
45+
return abs(arr[i] - x) < abs(arr[j] - x)
46+
}
47+
return arr[i] < arr[j]
48+
})
49+
arr = arr[:k]
50+
sort.Ints(arr)
51+
return arr
52+
}
53+
54+
func abs(num int) int {
55+
if num < 0 {
56+
return -num
57+
}
58+
return num
59+
}
60+
```

0 commit comments

Comments
 (0)