标签:arr vector int res 081 力扣 abs result 658
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。