链接
思路 :
滑动窗口,正难则反 ;
要求数组连续的最小操作数,那么也就是要更改的数量最小,那么也就是要保留的数字越多,先进行原地去重,防止重复元素的影响;
滑动窗口,对于滑窗,只需要满足元素的nums[r] - nums[l] <= n - 1即可;
代码 :
class Solution {
public:
int minOperations(vector<int>& nums) {
int ans = 0 ;
sort(nums.begin(),nums.end()) ;
int n = nums.size() ;
int m = unique(nums.begin(),nums.end()) - nums.begin() ; // 原地去重
// 最多使多少个元素不变
int l = 0 ;
for(int i=0;i<m;i++){
// nums[r] - nums[l] <= n - 1
while(nums[i]-nums[l]> n - 1) l ++ ;
ans = max(ans , i - l + 1 );
}
return n - ans ;
}
};