记力扣2009:使数组连续的最少操作数 练习理解
给你一个整数数组
nums
。每一次操作中,你可以将nums
中 任意 一个元素替换成 任意 整数。如果
nums
满足以下条件,那么它是 连续的 :
nums
中所有元素都是 互不相同 的。nums
中 最大 元素与 最小 元素的差等于nums.length - 1
。比方说,
nums = [4, 2, 5, 3]
是 连续的 ,但是nums = [1, 2, 3, 5, 6]
不是连续的 。请你返回使
nums
连续 的 最少 操作次数。
思路:
考虑到正面做需要考虑到:需要替换多少元素不如去想能存在一组最长的数组剩余的即为最小去除数
想到正难则反:直接去找最多可以使哪些元素连续,反面就是最小操作次数在这个流程中,最重要的是题目中最大值减最小值的差为n-1意思是数组全是连续且间隔为1,这个条件读懂后面就只需要滑窗,只需要确保区间长度为n,等价于左端点nums[left]在范围内
class Solution:def minOperations(self,nums:List[int])->int:ans=left=0n=len(nums)nums=sorted(set(nums))for i,char in enumerate(nums):while nums[left]<char-n+1:left+=1ans=max(ans,i-left+1)return n-ans
难点:
1.重复数据不影响最小操作数
2.读懂题目隐含条件是连续间隔为1的数组
3.读懂区间为n长度的数组
4.理解nums[left]为最长区间的左端点
5.数组内最大容纳量即为连续数组最小操作次数