
解法一:首先通过题意,可以得知,这是一个固定大小的数组,从而可以从滑动窗口这方面入手,固定K大小的窗口,然后通过窗口的左边界和右边界进行判断,从而可得到左边的下标值,通过这个值,构建数组返回。
- class Solution {
- public:
- vector<int> findClosestElements(vector<int>& arr, int k, int x)
- {
- int n=arr.size()-k;//固定滑动窗口位置
- vector<int>v1;
- //找到i的位置,
- int i=0;
- for(;i
- {
- //如果滑动数组所有值都大于x值,直接跳出,从当前位置就ok
- if(arr[i]>=x)break;
- //i比数组小,k比数组值小,需要向右移动
- if(arr[i+k]
continue; - //在区间范围之内,需要比较i的值和i+k的差值大小,如果小于或者等于,不用移动,要不就继续向前移动
- if(abs(arr[i]-x)<=abs(arr[i+k]-x))break;
- }
- for(int j=0;j
- {
- v1.push_back(arr[j+i]);
- }
- return v1;
- }
- };
解法二:重写快排的比较
- class Solution {
- public:
- vector<int> findClosestElements(vector<int>& arr, int k, int x)
- {
- //用lamlada 表达式重写比较函数或者仿函数
- sort(arr.begin(),arr.end(),[&](int&a,int&b)->bool{return abs(a-x)<abs(b-x)||abs(a-x)==abs(b-x)&&a
- sort(arr.begin(),arr.begin()+k);
- return vector<int>(arr.begin(),arr.begin()+k);
- }
- };
-
相关阅读:
解析:动态规划 01背包
支持语音与视频即时通讯项目杂记(一)
Java面经汇总
项目管理的核心是什么?
ceph报错总结
数据结构与算法之排序: 冒泡排序 (Javascript版)
stm32——hal库学习笔记(ADC)
LeetCode --- 2068. Check Whether Two Strings are Almost Equivalent 解题报告
当用户打开控制台时,禁止操作
mysql大表ddl注意
-
原文地址:https://blog.csdn.net/m0_63111921/article/details/126517927