2022.4.30每日一题

该博客讨论了一个编程问题,即如何找到整数数组在允许一定范围内修改每个元素的情况下,使得最大值与最小值差值最小的方法。博主首先通过遍历寻找数组的最大值和最小值,然后判断这个差值是否小于等于2k。如果是,则最低差值为0;否则,返回原差值减去2k。提供的C++代码实现了这一逻辑,但提到了使用sort可能会导致溢出的问题。
摘要由CSDN通过智能技术生成

一、每日一题

908. 最小差值 I

给你一个整数数组 nums,和一个整数 k 。

在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。

nums 的 分数 是 nums 中最大和最小元素的差值。

在对 nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。

二、解题思路

​ 首先根据题目要求得知要求最大最小值的差值,所以直接先遍历找最大最小值(或者排序直接用头尾),然后判断max-min与2k的关系如果小于等于2k,即通过修改后最小差值为0,否则就返回max-min-2*k。

三、源代码

class Solution {
public:
    int smallestRangeI(vector<int>& nums, int k) {
        int a=nums[0],b=nums[0];
        for(int i=0;i<nums.size();i++)
        {
            a=max(a,nums[i]);
            b=min(b,nums[i]);
        }
        return a-b<=2*k? 0 :a-b-2*k;
    }
};

(img-LwjD9KnS-1651316692208)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220430185602945.png)]

好像用sort会溢出,目前学的还不够,也不知道啥原因

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值