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

LeetCode 0908.最小差值 I:思维(遍历)

title

【LetMeFly】908.最小差值 I:思维(遍历)

力扣题目链接:https://leetcode.cn/problems/smallest-range-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 <= 104
  • 0 <= nums[i] <= 104
  • 0 <= k <= 104

解题方法:遍历

这道题应该如何思考呢?如何将变化后数组中最大值和最小值之差尽可能地小?当然是“大的数尽可能往小的变”、“小的数尽可能往大的变”。

  • 如果 k k k很小,那么最大的数 M M M最多减小到 M − k M-k Mk,最小的数 m m m最多增加到 m + k m+k m+k,最终的最小差值为 M − m − 2 ∗ k M-m-2*k Mm2k
  • 如果 k k k足够大 2 k ≥ M − m 2k\geq M-m 2kMm,那么所有的数都可以变成相同的数,最终最小差值为 0 0 0

因此答案为 max ⁡ { 0 , max ⁡ ( n u m s ) − min ⁡ ( n u m s ) − 2 k } \max\{0, \max(nums)-\min(nums)-2k\} max{0,max(nums)min(nums)2k}

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:int smallestRangeI(vector<int>& nums, int k) {int M = *max_element(nums.begin(), nums.end());int m = * min_element(nums.begin(), nums.end());return max(0, M - m - 2 * k);}
};
Go
package mainimport "slices"func smallestRangeI(nums []int, k int) int {return max(0, slices.Max(nums) - slices.Min(nums) - 2 * k)
}
Java
class Solution {public int smallestRangeI(int[] nums, int k) {int M = nums[0], m = nums[0];for (int t : nums) {M = Math.max(M, t);m = Math.min(m, t);}return Math.max(0, M - m  - 2 * k);}
}
Python
from typing import Listclass Solution:def smallestRangeI(self, nums: List[int], k: int) -> int:return max(0, max(nums) - min(nums) - 2 * k)

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/143112464

相关文章:

LeetCode 0908.最小差值 I:思维(遍历)

【LetMeFly】908.最小差值 I&#xff1a;思维&#xff08;遍历&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/smallest-range-i/ 给你一个整数数组 nums&#xff0c;和一个整数 k 。 在一个操作中&#xff0c;您可以选择 0 < i < nums.length 的…...

Python基础之循环语句

在Python的编程世界里&#xff0c;循环结构犹如一把神奇的钥匙&#xff0c;开启高效处理数据和重复执行任务的大门。它赋予程序员强大的力量&#xff0c;让代码充满活力。Python主要有两种类型的循环语句&#xff1a;for循环和while循环。 一、for循环 for循环通常用于遍历一个…...

项目管理软件真的能让敏捷开发变得更简单吗?

敏捷开发是一种以快速交付和适应变化为核心特点的软件开发方法。其特点包括尽早并持续交付、能够驾驭需求变化、版本周期内尽量不加任务、业务与开发协同工作、以人为核心、团队配置敏捷等。 例如&#xff0c;尽早并持续交付可使用的软件&#xff0c;使客户能够更早地体验产品…...

互联网名称之时间戳

什么是时间戳 时间戳&#xff08;Timestamp&#xff09;是一种用于表示特定时刻的数值或字符串&#xff0c;通常以日期和时间的形式出现。它用于记录某一事件发生的准确时间&#xff0c;在计算机系统中常被用于日志记录、数据处理和同步等场景。 常见的时间戳 在互联网中常见…...

Leetcode—1242. 多线程网页爬虫【中等】Plus(多线程)

2024每日刷题&#xff08;187&#xff09; Leetcode—1242. 多线程网页爬虫 实现代码 /*** // This is the HtmlParsers API interface.* // You should not implement it, or speculate about its implementation* class HtmlParser {* public:* vector<string>…...

RISC-V笔记——内存模型总结

1 前言 Memory consistency model定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering)&#xff0c;RVWMO内存模型是根据全局内存顺序(global memory order)定义的&#xff0c;全局内存…...

后端常用安全措施

一、限流 1.简介 限流就是限制流量&#xff0c;但这里的流量是一个比较笼统的概念。如果考虑各种不同的场景&#xff0c;限流是非常复杂的&#xff0c;而且和具体的业务规则密切相关 通过限流&#xff0c;可以控制服务请求的速率&#xff0c;从而提高系统应对突发大流量的能…...

虚拟机数据恢复—通过拼接数据库页碎片的方式恢复数据库的数据恢复案例

虚拟机数据恢复环境&#xff1a; 某品牌服务器通过同品牌某型号的RAID卡&#xff0c;将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台&#xff0c;虚拟机安装Windows Server系统&#xff0c;每台虚拟机有两个虚拟机磁盘&#xff08;系统盘 数据盘&#xff09;&am…...

【vue】自封组件,基于vue2封装一个弹框组件

源码&#xff1a;https://download.csdn.net/download/galaxyJING/89913551...

ES6基础知识

一、定义变量的关键字let和const 1. let 定义变量的语法&#xff1a; let 变量名 值; 2. 和var定义变量的区别 1. 是否支持同一个作用域变量同名 var支持&#xff0c;let不支持 2. 是否支持预解析 var支持&#xff0c;let不支持 3. 是否会挂载在window对象…...

基于Multisim的模拟拔河游戏比赛设计与仿真

1.设计一个模拟拔河游戏比赛的逻辑电路 2.使用15个发光二极管表示绳子&#xff0c;开机后只有最中间的发光二极管亮。 3.比赛双方各持一个按钮&#xff0c;快速不断地按动按钮&#xff0c;产生脉冲&#xff0c;谁按的快&#xff0c;发光的二极管就向谁的方向移动&#xff0c;每…...

MyBatis 配置详解

在项目中经常会用到 mybatis 相关的一些配置&#xff0c;而在启动类项目工程中&#xff0c;一般会把 mybatis 配置文件单独写到 mybatis,yml 中&#xff0c;如下简单介绍下常用的 mybatis 配置 mybatis:configuration:call-setters-on-nulls: truemap-underscore-to-camel-case…...

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付...

躺平成长-利用kimi编辑助手帮助自己编程第二天

天有道&#xff0c;无常道&#xff0c;兵无常势。 {今天开始听歌&#xff08;歌曲&#xff1a;青丝&#xff01;&#xff09;进行编程&#xff01;} 尝试用ai帮助自己进行小程序的开发&#xff0c;同时最为关键&#xff0c;是无法能够完成相关的代码的记忆&#xff0c;所以我开…...

OpenSuse-搭建NFS-Server

在OpenSUSE上搭建NFS服务可以通过以下步骤完成&#xff1a; ### 1. 安装NFS服务器软件 首先&#xff0c;确保你已经安装了NFS服务器软件包。你可以使用zypper命令来安装&#xff1a; sudo zypper install nfs-kernel-server### 2. 配置NFS导出目录 编辑/etc/exports文件&#x…...

【数据结构与算法】之二分查找

二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它通过比较数组中间元素与目标值来工作&#xff0c;从而将搜索范围缩小到一半&#xff0c;也称折半查找&#xff0c;是一种非常高效的工作于有序数组的查找算法。本文主要介绍二分查找…...

vue修饰符

表单修饰符 1、lazy <input type "text" v-model.lazy "value"> <p>{{value}}</p>lazy跟懒加载类似&#xff0c;只有再说鼠标离开光标的时候才会触发&#xff0c;也就是说在input事件的oninput书法的时候不会赋值&#xff0c;当onch…...

Oracle里面,with ... as 用法介绍

在Oracle数据库中&#xff0c;WITH AS 子句&#xff08;也称为公用表表达式&#xff0c;CTE, Common Table Expression&#xff09;是一种在查询中定义临时结果集的方法。这个临时结果集可以在后续的查询中被引用&#xff0c;就像是一个临时的表或视图一样。使用 WITH AS 子句可…...

一个简单的Qt Console Application计算练习程序

初步体验Qt Creator 用途&#xff1a;练习20以内2位数乘法速算的程序 功能1&#xff1a;支持用户设定题目数量 std::cout << "请输入本次练习题目数量&#xff1a;";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…...

windows文件拷贝给wsl2的Ubuntu

参考&#xff1a; windows文件如何直接拖拽到wsl中_win 移到文件到wsl-CSDN博客 cp -r /mnt/盘名/目标文件 要复制到wsl中的位置e.g.cp -r /mnt/d/byt5 /home Linux文件复制、移动、删除等操作命令_linux移动命令-CSDN博客 Linux 文件、文件夹的复制、移动、删除 - Be-myse…...

Windows 10 64位系统下Neo4j社区版与桌面版安装全攻略(2023最新版)

1. Neo4j简介与安装准备 如果你正在寻找一款强大的图数据库来管理复杂的关系数据&#xff0c;Neo4j绝对是个不错的选择。作为目前最流行的开源图数据库&#xff0c;它用起来就像在画一张巨大的网络图——每个节点代表实体&#xff08;比如人或产品&#xff09;&#xff0c;每条…...

别再花钱买内网穿透服务了!手把手教你用frp+Linux云服务器搭建自己的专属通道

零成本打造私有内网穿透通道&#xff1a;frp与Linux云服务器实战指南 你是否曾为远程访问家中NAS、调试开发环境或搭建私有云服务而烦恼&#xff1f;市面上动辄数百元的商业内网穿透服务不仅价格高昂&#xff0c;还常受限于带宽和稳定性。本文将带你用一台基础配置的Linux云服…...

深入解析STM32与FreeRTOS内存管理:从理论到实践的最佳配置策略

1. STM32内存结构深度剖析 第一次接触STM32内存管理时&#xff0c;我也被那些专业术语搞得晕头转向。直到把开发板跑死机十几次后&#xff0c;才真正理解RAM和Flash的区别。简单来说&#xff0c;RAM就像你的办公桌面&#xff0c;随时可以读写但断电就清空&#xff1b;Flash则是…...

3分钟掌握的网盘密码解析黑科技:让提取码自动获取效率提升10倍

3分钟掌握的网盘密码解析黑科技&#xff1a;让提取码自动获取效率提升10倍 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经因为寻找百度网盘分享链接的提取码而浪费大量时间&#xff1f;传统方式下&#xff0c;用户…...

颠覆中文字体困境:思源宋体CN 7字重开源方案深度解析

颠覆中文字体困境&#xff1a;思源宋体CN 7字重开源方案深度解析 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 价值主张&#xff1a;破解中文字体的"三重枷锁" 在数字设计…...

AIVideo一站式AI长视频工具与Visual Studio的深度集成开发

AIVideo一站式AI长视频工具与Visual Studio的深度集成开发 1. 引言 作为一名长期使用Visual Studio进行开发的程序员&#xff0c;我经常遇到这样的痛点&#xff1a;想要录制一段代码演示视频&#xff0c;需要反复切换多个软件&#xff1b;想要制作项目介绍视频&#xff0c;得…...

Arcgis符号化实战:用矢量文件制作专业级统计地图(附最新配色方案)

ArcGIS符号化实战&#xff1a;用矢量文件制作专业级统计地图&#xff08;附最新配色方案&#xff09; 当你面对一叠枯燥的表格数据时&#xff0c;是否想过如何让这些数字"活"起来&#xff1f;统计地图正是将抽象数据转化为直观视觉表达的利器。作为地理信息系统领域的…...

DanKoe 视频笔记:每日60分钟改变生活:引言与概述

在本教程中&#xff0c;我们将学习如何通过每天投入60分钟来系统地改变生活。我们将探讨常规的重要性&#xff0c;并介绍三个核心习惯&#xff0c;帮助你重新掌控精力、提升财务状况、改善健康以及获得内心的清晰。 每日60分钟改变生活&#xff1a;2&#xff1a;常规的必要性 …...

cv_unet_image-colorization音乐史料处理:黑白乐谱AI上色与音符语义关联增强

cv_unet_image-colorization音乐史料处理&#xff1a;黑白乐谱AI上色与音符语义关联增强 1. 引言&#xff1a;当黑白乐谱遇见AI色彩 想象一下&#xff0c;你是一位音乐史研究者&#xff0c;面前摊开一本泛黄的、只有黑白线条的19世纪乐谱手稿。那些音符、标记、作曲家的笔迹&…...

STM32F407实战:基于CubeMX与FreeRTOS的SDIO-FatFs文件系统高效读写方案

1. 环境准备与CubeMX基础配置 第一次接触STM32F407的SD卡存储时&#xff0c;我被各种专业术语搞得晕头转向。后来发现&#xff0c;只要用对工具和方法&#xff0c;实现文件系统读写其实没那么复杂。CubeMX这个图形化配置工具真是开发者的福音&#xff0c;它能帮我们自动生成80%…...