首页 > 其他分享 >LeetCode|910. 最小差值 II(day19)

LeetCode|910. 最小差值 II(day19)

时间:2024-10-25 20:47:56浏览次数:9  
标签:nums res 最大值 LeetCode II 最小值 差值 数组 910

作者:MJ昊

博客:掘金CSDN

公众号:程序猿的编程之路

今天是 昊 的算法之路第19天,今天分享的是LeetCode第910题 最小差值 II的解题思路。这是一道中等难度的题目,考察如何通过调整数组中的数值来最小化最大值与最小值之间的差距。

题目描述简要回顾

给定一个整数数组nums和一个整数k,我们可以将数组中的每个元素加上或者减去一个不超过k的数。目标是找到经过调整后,数组的最大值与最小值的最小差。

解题思路

  1. 为了使得最大差值最小,我们可以对数组先进行排序。然后考虑通过调整两个端点(即最大值和最小值)来求最小的差值。思路是:

  2. 数组经过排序后,调整元素时,最大值要么是nums[n-1] - k,要么是nums[i] + k(调整左端)。
    最小值要么是nums[0] + k,要么是nums[i+1] - k(调整右端)。 通过逐步比较不同情况下的最大差值,找到最优解。

代码实现:

var smallestRangeII = function (nums, k) {
	nums.sort((a, b) => a - b);
	const n = nums.length;
	let res = nums[n - 1] - nums[0];
	for (let i = 0; i < n - 1; i++) {
		const maxVal = Math.max(nums[i] + k, nums[n - 1] - k);
		const minVal = Math.min(nums[0] + k, nums[i + 1] - k);
		res = Math.min(res, maxVal - minVal);
	}
	return res;
};

复杂度分析

  • 时间复杂度: O(n log n),主要是排序的时间复杂度。
  • 空间复杂度: O(1),只使用了常数空间。

总结

本题的核心在于排序后通过贪心的策略比较不同情况,找到最优的最小差值。通过调整最大值和最小值两端的元素,可以有效地控制差值的变化,最终得出最优解。

标签:nums,res,最大值,LeetCode,II,最小值,差值,数组,910
From: https://blog.csdn.net/Hao_i/article/details/143134454

相关文章

  • IIS使用反向代理,解决路径包含特殊字符无法访问的问题
    环境:操作系统:WindowsServer2019IIS版本:10问题试用Nocobase的时候,遇到400BadRequest的报错。 直接访问的话,报错页面是非常常见的RuntimeError。诡异这个问题,在开发端(Windows11)的IIS中不会出现。同样的IIS版本。解决办法先说结论,时间比较赶的朋友直接试这个就可以......
  • 2024-10-23-leetcode每日一题-构成整天的下标对数目 II
    题目描述给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i<j 且 hours[i]+hours[j] 构成 整天 的下标对 i, j 的数目。整天 定义为时间持续时间是24小时的 整数倍 。例如,1天是24小时,2天是48小时,3天是72小时,以此类推。......
  • iis部署tms web core
    iis部署tmswebcore首先准备好你要发布的网站文件夹 1)iis设置网站2)1、打开“IIS信息服务管理器”——》选择你发布的网站——》选择功能视图中的“身份验证”——》右键匿名身份验证,选择“编辑”,选择“特定用户IUSR”;2、右键要发布的网站文件夹,选择“安全”——》“编辑......
  • LeetCode_70. 爬楼梯_java
    1、题目70.爬楼梯https://leetcode.cn/problems/climbing-stairs/假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输......
  • LeetCode_509. 斐波那契数_java
    1、题目509.斐波那契数https://leetcode.cn/problems/fibonacci-number/斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给定n,请......
  • LeetCode_2119. 反转两次的数字_java
    1、题目2119.反转两次的数字https://leetcode.cn/problems/a-number-after-a-double-reversal/反转一个整数意味着倒置它的所有位。   例如,反转2021得到1202。反转12300得到321,不保留前导零。给你一个整数num,反转num得到reversed1,接着反转reversed1......
  • leetcode-1280-学生参加各科测试的次数
    链接:1280.学生们参加各科测试的次数-力扣(LeetCode)前提条件:学生表: Students+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主......
  • 【每日一题】LeetCode - 最长回文子串
    在字符串相关的算法题中,寻找最长回文子串是一个经典且富有挑战性的题目。本篇将详细分析并推导两种有效的解决方案:动态规划法和中心扩展法。题目描述给定一个字符串s,我们需要找到s中最长的回文子串。回文是指正着读和反着读都相同的字符串。例如,输入"babad"时,输出可......
  • 【leetcode-面试经典 150 题】-4.删除有序数组中的重复项 II
    题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用O(1)额外空间的条件下完成。示例1:输入:nums=[1,1,1,2,2,3]输出:5,nums=......
  • 【leetcode-面试经典 150 题】-1.合并两个有序数组
    题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 ......