
解法一:首先通过题意,可以得知,这是一个固定大小的数组,从而可以从滑动窗口这方面入手,固定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);
- }
- };
-
相关阅读:
基于移动互联网的短视频APP设计
【011】Wireshark主窗口新增、删除显示的列数
day4:Node.js 核心库
CentOS 8 通过YUM方式升级最新内核
Dapr学习(2)之Rancher2.63(k8s&k3s)环境安装Dapr
软工非全研究生学习和工作总结-开题和第三辆捷安特
java删除目录及删不掉问题分析
高效数据传输:Java通过绑定快速将数据导出至Excel
《银河麒麟高级服务器操作系统V10》使用
前端入门(一)JavaScript语法、数据类型、运算、函数
-
原文地址:https://blog.csdn.net/m0_63111921/article/details/126517927
-
最新文章
-
【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
Halo插件:支持GitHub的图床附件策略
电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
软件更好写之后口碑会更重要
大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
Java标签跳转:一个鲜为人知但却很实用的小技巧
多智能体系统论文速读