首页 > 其他分享 >[LeetCode] 910. Smallest Range II

[LeetCode] 910. Smallest Range II

时间:2024-10-21 10:23:47浏览次数:7  
标签:score min int max nums II Range Smallest res

You are given an integer array nums and an integer k.

For each index i where 0 <= i < nums.length, change nums[i] to be either nums[i] + k or nums[i] - k.

The score of nums is the difference between the maximum and minimum elements in nums.

Return the minimum score of nums after changing the values at each index.

Example 1:
Input: nums = [1], k = 0
Output: 0
Explanation: The score is max(nums) - min(nums) = 1 - 1 = 0.

Example 2:
Input: nums = [0,10], k = 2
Output: 6
Explanation: Change nums to be [2, 8]. The score is max(nums) - min(nums) = 8 - 2 = 6.

Example 3:
Input: nums = [1,3,6], k = 3
Output: 3
Explanation: Change nums to be [4, 6, 3]. The score is max(nums) - min(nums) = 6 - 3 = 3.

Constraints:
1 <= nums.length <= 104
0 <= nums[i] <= 104
0 <= k <= 104

最小差值 II。

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

对于每个下标 i(0 <= i < nums.length),将 nums[i] 变成 nums[i] + k 或 nums[i] - k 。

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

在更改每个下标对应的值之后,返回 nums 的最小 分数 。

思路

这道题是 908 题的版本二,题意跟 908 题稍有不同。在这道题里,对于每个元素 nums[i] 而言,你必须做 +k 或 -k 的操作。这道题我参考了这个帖子,写的很好,图示也很清楚。

如果没有 k,那么这道题和 908 题一样,直接求最大值和最小值差值即可。但是因为牵涉到 k 的操作了,而且我们要找的这个差值 (max - min) 需要尽可能小,所以基本的思路是要让小的数字尽可能大(那就 + k),让大的数字尽可能小(那就 - k)。但是在操作的过程中极有可能导致 min + kmax - k要大。所以我们不能只考虑这两个值,还要考虑中间的那些值。

所以对于任何一个中间的 index i 而言,他左侧的元素是 nums[0] 到 nums[i - 1];他右侧的元素是 nums[i] 到 nums[n - 1]nums[0] 到 nums[i - 1] 都要 + k,nums[i] 到 nums[n - 1] 都要 - k。

这样一来,

  • 最大值就是 nums[n - 1] - knums[i - 1] + k 的最大值
  • 最小值就是 nums[i] - knums[0] + k 的最小值

复杂度

时间O(nlogn) - sort
空间O(1)

代码

Java实现

class Solution {
    public int smallestRangeII(int[] nums, int k) {
        int n = nums.length;
		Arrays.sort(nums);
		int min = nums[0];
        int max = nums[n - 1];
        int res = max - min;
        for (int i = 1; i < n; i++) {
            max = Math.max(nums[i - 1] + k, nums[n - 1] - k);
            min = Math.min(nums[0] + k, nums[i] - k);
            res = Math.min(res, max - min);
        }
		return res;
    }
}

标签:score,min,int,max,nums,II,Range,Smallest,res
From: https://www.cnblogs.com/cnoodle/p/18488681

相关文章

  • OOI XVIII
    CF1939B题目描述有一些点和\(N-1\)次操作,每次会在点\(u\)上所有纸条的上方贴一张纸条\(c_u\),在\(v\)上贴\(c_v\),并在两个点之间建一条边权为\(w_{u,v}\)的边,这次操作必须满足\(c_u+c_v\gew_{u,v}\)。现在给你每个点上从上至下的纸条和所有边的边权,请给出一种加边......
  • 代码随想录算法训练营 | 739. 每日温度,496.下一个更大元素 I ,503.下一个更大元素II
    739.每日温度题目链接:739.每日温度文档讲解︰代码随想录(programmercarl.com)视频讲解︰每日温度日期:2024-10-20想法:遍历一遍数组,用栈来存数组下标做记录,因为要找更高得温度,当当前遍历的温度大于栈头存储(存的下标)的温度时,就可以知道栈头要过多少天遇到高温,低的时候直接入栈。J......
  • 1077. 项目员工 III
    力扣题目跳转(1077.项目员工III-力扣(LeetCode))项目表 Project:+-------------+---------+|ColumnName|Type|+-------------+---------+|project_id|int||employee_id|int|+-------------+---------+(project_id,employee_id)是这个表的......
  • 代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II
    1.leetcode面试题02.07.链表相交题目链接:面试题02.07.链表相交-力扣(LeetCode)文章链接:代码随想录1.1代码跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,x):#......
  • 40. 组合总和 II
    目录一、问题描述二、解题思路三、代码四、复杂度分析一、问题描述给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能......
  • P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
    Sol蒲公英题意基本相同,但是注意到空间限制62.5MB,显然不能用蒲公英的做法。考虑先把整块的答案算出来,然后把小块的部分补上去,显然大块可以预处理,小块可以直接暴力查询是否越界。代码很简单。Code#include<iostream>#include<iomanip>#include<cstdio>#include<vector>......
  • 用C++实现自己的智能指针:深入探讨内存管理与RAII模式
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界C++中的内存管理一直以来是程序员的一个难点,尤其是在处理动态内存分配时。智能指针(如std::unique_ptr和std::shared_ptr)通过RAII(资源获取即初始化)的设计理念,极大地简化了动态内存的管理,减少了内存泄漏的风险。然......
  • Java毕设项目案例实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着医疗行业的快速发展和人们对健康需求......
  • C++的RAII原则
    C++的RAII原则内容ResourceAcquisitionIsInitialization(RAII)isacoreprogrammingconceptinC++(andotherresource-managedlanguages).Itensuresthatresources,suchasmemory,filehandles,ornetworkconnections,areacquiredandreleasedproperlyb......
  • Range范围选区的理解
    <!--*@Date:2024-10-1410:02:56*@Description:Modifyhereplease--><!doctypehtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=......