数组的最大美丽值(区间最大重叠次数)

ops/2024/12/16 14:33:12/

一、题目描述

给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。

在一步操作中,你可以执行下述指令:

  • 在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。
  • 将 nums[i] 替换为范围 [nums[i] - k, nums[i] + k] 内的任一整数。

数组的 美丽值 定义为数组中由相等元素组成的最长子序列的长度。

对数组 nums 执行上述操作任意次后,返回数组可能取得的 最大 美丽值。

注意:你  能对每个下标执行 一次 此操作。

数组的 子序列 定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。

示例 1:

输入:nums = [4,6,1,2], k = 2
输出:3
解释:在这个示例中,我们执行下述操作:
- 选择下标 1 ,将其替换为 4(从范围 [4,8] 中选出),此时 nums = [4,4,1,2] 。
- 选择下标 3 ,将其替换为 4(从范围 [0,4] 中选出),此时 nums = [4,4,1,4] 。
执行上述操作后,数组的美丽值是 3(子序列由下标 0 、1 、3 对应的元素组成)。
可以证明 3 是我们可以得到的由相等元素组成的最长子序列长度。

二、思路分析

这个题目的意思就是,给你一个数k,有n个[num[i]-k,num[i]+k]区间。找出这些区间的交集,也就是这些区间覆盖最多的那个数。

看似还需要找到替换成哪个数,其实本质就是寻找区间重叠最多的那个数,替换为这个就行。

首先我们对每个区间进行排序,然后遍历每个区间,看当前区间的右端点可以覆盖几个区间,也就是比几个区间的左端点大。我们只需要求得覆盖几个区间的数量,而不用保存那个数,因为求的是最长子序列的长度。

因为这个题的区间长度是一样的,在草稿上画一下就知道了,其实不需要考虑区间,我们只需要当前num[i]+2*k比几个num[i]大即可,也就是能覆盖到几个区间。

又因为这个数组是我们排序好,我们使用二分查找来找到num[i]+2*k的插入位置,就能知道他比几个num[i]大了。

具体实现很简单,请看下面的代码:

三、代码实现

class Solution:def maximumBeauty(self, nums: List[int], k: int) -> int:nums.sort()num = 0for i in range(len(nums)):# 找到nums[i]+2*k可以插入的位置left = bisect.bisect_right(nums, nums[i]+2*k)# 计算出这个位置相对于i的长度,也就是可以覆盖区间的数量num = max(num,left - i)return num

如果对于求解长度不定的,最大重叠次数。我们可以使用差分数组来计算每个数被覆盖多少次。代码如下:

class Solution:def maximumCoveredNumber(self, intervals: List[List[int]]) -> int:# 找到区间的最大值max_value = max([end for _, end in intervals])# 初始化差分数组diff = [0] * (max_value + 2)  # 为了避免越界,我们多开一个空间# 对每个区间进行差分更新for start, end in intervals:diff[start] += 1diff[end + 1] -= 1  # 注意,end + 1 位置的差值需要减去# 计算前缀和,找出最大覆盖次数current_cover = 0max_cover = 0for i in range(max_value + 1):current_cover += diff[i]max_cover = max(max_cover, current_cover)return max_cover


http://www.ppmy.cn/ops/142392.html

相关文章

安装pycuda 报错:#include <cuda.h>

问题&#xff1a;pip install pycuda安装pycuda 报错如下 src/cpp/cuda.hpp:14:18: fatal error: cuda.h: No such file or directory #include <cuda.h>^ error: command /usr/bin/gcc failed with exit code 1解决1&#xff1a; pip install cuda-python12.1.0 -i ht…

活动预告 | Microsoft 365 在线技术公开课:让组织针对 Microsoft Copilot 做好准备

课程介绍 通过Microsoft Learn免费参加Microsoft 365在线技术公开课&#xff0c;建立您需要的技能&#xff0c;以创造新的机会并加速您对Microsoft云技术的理解。参加我们举办的“让组织针对 Microsoft Copilot for Microsoft 365 做好准备” 在线技术公开课活动&#xff0c;学…

【NLP 14、激活函数 ② tanh激活函数】

学会钝感力&#xff0c;走向美好的方向 —— 24.12.11 一、tanh激活函数 1. tanh函数的定义 tanh是双曲正切函数&#xff08;Hyperbolic Tangent&#xff09;&#xff0c;数学表达式为 其函数图像是一个S型曲线&#xff0c;以原点 (0&#xff0c;0) 为中心对称&#xff0c;定…

windows下pyenv与宝塔python冲突解决

windows下安装pyenv后与宝塔python环境冲突 1、将C:\Program Files\python\Scripts中的pip3.exe改名(pip3-.exe) 2、将C:\用户\{用户名}\.pyenv\pyenv-win\shims中的pip、pip.bat、python、python.bat改名(pip-、pip-.bat、python-、python-.bat)&#xff0c;然后使用pip3和p…

前端成长之路:HTML(3)

在HTML中&#xff0c;有列表标签。列表最大的特点是整齐、简洁、有序&#xff0c;用列表进行布局会更加自由方便。根据使用的情景不同&#xff0c;可以将列表分为三大类&#xff1a;无序列表、有序列表和自定义列表。 无序列表 在HTML中使用<ul>标签定义一个无序列表&a…

Scala泛型应用场景

Scala中的泛型&#xff08;Generics&#xff09;是一种强大的工具&#xff0c;允许开发者编写可重用的代码&#xff0c;同时保持类型安全。泛型在Scala中有多种应用场景&#xff0c;以下是一些常见的应用场景&#xff1a; 集合类&#xff1a; Scala的集合类&#xff08;如List…

华为HarmonyOS帮助应用实现在线认证服务 -- 3 IFAA免密身份认证

场景介绍 开通&#xff1a;提供移动端开通生物特征&#xff08;指纹/3D人脸&#xff09;IFAA免密身份认证的能力。使用用户已有的生物特征类型进行开通&#xff0c;会开通移动端对应生物特征类型的IFAA免密身份认证能力。 认证&#xff1a;提供移动端认证生物特征&#xff08…

苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?

苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装&#xff0c;苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件&#xff0c;它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp&#xff0c;用户可以在启动电脑时选择是要进入macOS还是Wi…