368. Largest Divisible Subset

题目

https://leetcode.com/problems/find-k-closest-elements/description/

-w947

想法

既然是排序好的,肯定要用到二分查找

找到与x距离最近,<=x的,然后开始拓展开来

嗯,一开始还是欠考虑了,找到<=x的最近元素之后,要向两边挨个比较,最后得到需要的值

这里有一个api还是查阅了下,记下备忘:

1
vec.insert(vec.begin(), 47); // vector头插入一个元素

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
int l = 0, r = arr.size() - 1;
int mid;
while (l <= r) {
mid = (l + r) / 2;
if (arr[mid] > x) {
r = mid - 1;
} else if (arr[mid] == x) {
break;
} else {
if (mid == l) {
break;
} else {
l = mid + 1;
}
}
}
// cout << mid;
vector<int> res;
l = mid, r = mid + 1;
for (int cnt = 0; cnt < k; cnt++) {
if (l < 0) {
res.push_back(arr[r]);
r++;
} else if (r >= arr.size()) {
res.insert(res.begin(), arr[l]);
l--;
} else if (abs(arr[r] - x) < abs(arr[l] - x)) {
res.push_back(arr[r]);
r++;
} else {
res.insert(res.begin(), arr[l]);
l--;
}
}
return res;
}
};