当前位置: 首页 > article >正文

力扣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,1,2,3,4,5], k = 4, x = -1
输出:[1,1,2,3]

提示:

  • 1 <= k <= arr.length
  • 1 <= arr.length <= 104
  • arr 按 升序 排列
  • -104 <= arr[i], x <= 104

代码:

class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        
        int left = 0, right = k-1;
        int cost = 0, mincost = 99999999999999, minleft = 0;
        vector<int> res;

        while(right < arr.size()){
            
            cost = 0;

            for(int i = left; i <= right; i++){
                cost += abs(arr[i] - x); 
            }

            if(cost < mincost){
                minleft = left;
                mincost = cost;
            }

            if(cost > mincost){
                break;
            }

            left++;
            right++;
        }

        for(int i = minleft; i <= minleft+k-1; i++){
            res.push_back(arr[i]); 
        }
        
        return res;
    }
};

解题思路:

(1)暴力暴力暴力。

(2)定义 k 大小的窗口,计算每个元素与 x 的差。

(3)找到最小差值的窗口。

(4)还可以使用双指针从头尾开始遍历。


http://www.kler.cn/a/451735.html

相关文章:

  • 【RAG实战】语言模型基础
  • WPS工具栏灰色怎么办
  • 工业“元宇宙化”:科技引领生产新潮流
  • 微软的AI转型故事
  • docker环境动态链接库找不到liblpsolve55.so
  • 网络安全 | 入门:理解基本概念和术语
  • LabVIEW应用在工业车间
  • 前端XMLHttpRequest get请求能不能在body中传参数?
  • IDEA 打开 maven 的 settings.xml 文件
  • C语言-结构体数组练习题
  • 游戏引擎学习第60天
  • Netty ByteBuf 的零拷贝(Zero Copy)详解
  • 数据结构之旅:红黑树如何驱动 Set 和 Map
  • 地理数据库Telepg面试内容整理-应用层开发
  • 云边端架构的优势是什么?面临哪些挑战?
  • 选择FPGA开发,学历是硬性要求吗?
  • feign验签不通过,但是postman没问题
  • 【Java 基础】-- ArrayList 和 Linkedlist
  • 总结一下数据结构 树 的种类
  • 安卓音频之dumpsys audio