文章目录
- [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;}
点击移步博客主页,欢迎光临~