【力扣 081】658. 找到 K 个最接近的元素
作者:互联网
658. 找到 K 个最接近的元素
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。
整数 a 比整数 b 更接近 x 需要满足:
|a - x| < |b - x| 或者
|a - x| == |b - x| 且 a < b
示例 1:
输入:arr = [1,2,3,4,5], k = 4, x = 3
输出:[1,2,3,4]
示例 2:
输入:arr = [1,2,3,4,5], k = 4, x = -1
输出:[1,2,3,4]
提示:
1 <= k <= arr.length
1 <= arr.length <= 104
arr 按 升序 排列
-104 <= arr[i], x <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-k-closest-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:使用 sort 排序
① 代码实现:
class Solution {
public:
vector<int> findClosestElements(vector<int> &arr, int k, int x)
{
sort(arr.begin(), arr.end(), [=](int &a, int &b)
{ return abs(a - x) == abs(b - x) ? a < b : abs(a - x) < abs(b - x); });
vector<int> res;
for (int i = 0; i < k; i++)
{
res.push_back(arr[i]);
}
sort(res.begin(), res.end());
return res;
}
};
② 代码实现:
struct cmp
{
cmp(int x) : x(x) {}
bool operator()(int a, int b)
{
return (abs(a - x) == abs(b - x)) ? (a < b) : (abs(a - x) < abs(b - x)); //按照差的绝对值升序排序
}
int x;
};
class Solution
{
public:
vector<int> findClosestElements(vector<int> &arr, int k, int x)
{
sort(arr.begin(), arr.end(), cmp(x));
vector<int> result(k, 0);
for (int i = 0; i < k; i++)
{ // 取最靠近的k个数
result[i] = arr[i];
}
sort(result.begin(), result.end());
return result;
}
};
标签:arr,vector,int,res,081,力扣,abs,result,658 来源: https://www.cnblogs.com/sunbines/p/16323766.html