leetcode Smallest Range I

本文探讨了如何通过调整数组中的元素,使调整后的数组最大值与最小值之间的差值达到最小的问题。针对不同情况,文章提出了两种解决方案,并提供了详细的算法实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

题目大意:给定一个数组A和x(K<=x<=-K),对数组A中的每个数字都加上x,每个数字加的x可以不同,最后得到新的数组B,使得B中的最大值和最小值之差最小;

解题思路:最后要求的是最大值和最小值之差最小,所以仅需考虑数组A中的最大值和最小值;

情况1:数组A中的最大值和最小值之差<=2*K,则说明可以使得min+x1=max+x2成立,最后数组B的最大值和最小值之差为0;

情况2:数组B中的最大值和最小值之差>2*K,则只有当最小值+K,最大值-K,才会使最后结果最小,但两者之差不可能等于0.

源码附上:

class Solution {
public:
    int smallestRangeI(vector<int>& A, int K) {
        int max=*max_element(A.begin(),A.end());
        int min=*min_element(A.begin(),A.end());
        int result=max-min<=2*K?0:(max-K-(min+K));
        return result;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值