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

每日一题|910.最小差值II|数组排序思路、单调性

在这里插入图片描述

显然,较小的值增加,较大的值减小,能够得到较小的差值。

为此,我们用一个i把当前的排序后的数组分成两个部分,i以前的部分是较小值,i以后是较大值。

前一个部分增加k,后一个部分减小k。我们思考更新后的数组的最大、最小值来自哪里。

新的最大值只能来自原数组的最大值(排序后的最后一个数字)-k,或者i以前的部分(包括i)的最大值 + k。因为i以后的值都减小k,不可能比原最大值-k还要大。

new_max = max(ori_max - k, nums[i] + k) // nums[i]是排序后数组i以前部分中最大的

同理,我们可以得到新的最小值:

new_min = min(ori_min + k, nums[i + 1] - k) // nums[i + 1]是i以后部分中最小的

所以,只需要遍历一次nums,就可以得到最小的差值

res = min(res, new_max - new_min)

class Solution:
    def smallestRangeII(self, nums: List[int], k: int) -> int:
        nums.sort()
        min_, max_ = nums[0], nums[-1]
        res = max_ - min_

        for i in range(len(nums) - 1):
            a, b = nums[i], nums[i+1]
            res = min(res, max(nums[i] + k, max_ - k) - min(nums[i+1] - k, min_ + k))
        return res


http://www.kler.cn/news/359873.html

相关文章:

  • 深入理解Python函数
  • SAP B1 账套锁定解决方案
  • 【渗透测试】-红日靶场-获取web服务器权限
  • Linux -- 命名管道
  • ansible——ansible的变量
  • Typescript中的Required,Partial,Pick,Omit辅助类型
  • Python爬取站长素材图片【爬虫学习day.01】
  • Android Framework关闭触摸振动
  • Vue笔记-浏览器窗口改变时,重新计算表格高度并设置
  • 【OpenCV】人脸识别方法
  • 32.第二阶段x86游戏实战2-遍历技能2(技能二叉树基址)
  • WPF中的<Style.Triggers>
  • 项目管理软件真的能让敏捷开发变得更简单吗?
  • 【2024CANN训练营第二季】使用华为云体验AscendC_Sample仓算子运行
  • 【华为HCIP实战课程十六】OSPF虚链路Vlink,网络工程师
  • 代码随想录算法训练营第三十一天|56. 合并区间、738.单调递增的数字
  • Typora的使用方法(个人学习笔记)
  • 03 springboot-国际化
  • Lambda架构保持批处理和实时处理之间的数据一致性
  • Vite:功能