本文主要是介绍每日一题(leetcode2009):使数组连续的最小操作数--滑动窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从相反面考虑,一条已知长度的线段最多能覆盖多少数值,最先用长度减一下就行。线段覆盖问题用滑动窗口就行。代码如下:
class Solution {
public:int minOperations(vector<int>& nums) {int len=nums.size();sort(nums.begin(),nums.end());int m=unique(nums.begin(),nums.end()) -nums.begin();int left=0;int ans=0;for(int i=0;i<m;i++){while(nums[left]<nums[i]-len+1){left++;}ans=max(i-left+1,ans);}return len-ans;}
};
其中 int m=unique(nums.begin(),nums.end()) -nums.begin();为原地去重代码。unique(nums.begin(),nums.end())返回的是排序好的数的后面一个数,所以减去开头就是去重序列的长度。
这篇关于每日一题(leetcode2009):使数组连续的最小操作数--滑动窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!