leetcode 908. 最小差值 I 简单

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

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

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

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

示例 1:

复制代码
输入:nums = [1], k = 0
输出:0
解释:分数是 max(nums) - min(nums) = 1 - 1 = 0。

示例 2:

复制代码
输入:nums = [0,10], k = 2
输出:6
解释:将 nums 改为 [2,8]。分数是 max(nums) - min(nums) = 8 - 2 = 6。

示例 3:

复制代码
输入:nums = [1,3,6], k = 3
输出:0
解释:将 nums 改为 [4,4,4]。分数是 max(nums) - min(nums) = 4 - 4 = 0。

提示:

  • 1 <= nums.length <= 10e4
  • 0 <= nums[i] <= 10e4
  • 0 <= k <= 10e4

分析:

假设整数数组 nums 的最小值为 minNum,最大值为 maxNum。想要分数最小,必然要让最小值变大,最大值变小。取最大值和最小值的平均数为目标值,若能调整到平均数,则答案为0;若不能,则答案为 maxNum - k - (minNum + k)

cpp 复制代码
int smallestRangeI(int* nums, int numsSize, int k) {
    int mini=100000,maxn=-1,mid;

    for(int i=0;i<numsSize;++i)
    {
        mini=fmin(mini,nums[i]);
        maxn=fmax(maxn,nums[i]);
    }
    mid=(mini+maxn)/2;

    maxn=fmax(maxn-k,mid);
    mini=fmin(mini+k,mid);

    return maxn-mini;
}
相关推荐
MoonBit月兔2 小时前
插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
ide·算法·leetcode
袁气满满~_~4 小时前
LeetCode:617、合并二叉树
算法·leetcode·二叉树
边跑边掩护5 小时前
LeetCode 820 单词的压缩编码题解
算法·leetcode·职场和发展
Espresso Macchiato5 小时前
Leetcode 3543. Maximum Weighted K-Edge Path
leetcode·leetcode medium·图遍历·leetcode 3543·leetcode双周赛156
爱coding的橙子6 小时前
每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h
算法·leetcode
阳洞洞6 小时前
leetcode 56. 合并区间
leetcode
小刘不想改BUG7 小时前
LeetCode LCR 015. 找到字符串中所有字母异位词 (Java)
linux·算法·leetcode
Musennn12 小时前
leetcode 15.三数之和 思路分析
算法·leetcode·职场和发展
MarkHard12317 小时前
Leetcode (力扣)做题记录 hot100(62,64,287,108)
算法·leetcode·职场和发展
小羊在奋斗1 天前
【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
算法·leetcode·链表