文章目录
- [2009. 使数组连续的最少操作数](https://leetcode.cn/problems/minimum-number-of-operations-to-make-array-continuous/)
- 思路:一、排序去重+滑动窗口
- 代码:
2009. 使数组连续的最少操作数
思路:一、排序去重+滑动窗口
1.对数组进行排序
2.遍历数组,进行原地去重,m为记录有效数字的长度,也就是窗口活动的范围
3.设x为修改后,连续数组的最大值,那么根据题意,最小值为 x-n+1
4.这个连续数组的范围就是:[x-n+1,x]
5.滑动窗口的左结点要大于等于[x-n+1],
6.枚举i当窗口的右结点,窗口的结点个数为:i-left+1
7.返回最大值
代码:
//2009. 使数组连续的最少操作数
public int minOperations(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
int m = 1;
//排好序后,原地去重
for (int i = 1; i < n; i++) {
if (nums[i] != nums[i - 1]) {
nums[m++] = nums[i];
}
}
int ans = 0;
int left = 0;
for (int i = 0; i < m; i++) {
//当left在窗口外时,移动left,直到left成为窗口的左结点
while (nums[left] < nums[i] - n + 1) {
left++;
}
ans = Math.max(ans, i - left + 1);
}
return n-ans;
}
点击移步博客主页,欢迎光临~