2009. Minimum Number of Operations to Make Array Continuous
计算把一个阵列变成连续阵列,以及:
1. 没有重复数字
2. 最大值减最小值为nums.len() -1
所需要的次数
题目描述写得有点烂
实际例子可以看:
nums = [4, 2, 5, 3] 是连续阵列
nums = [1, 2, 3, 5, 6] 不是连续阵列 要改成 [1, 2, 3, 5, 4]
思路:
用Sliding Window
方法是把无法让window内形成连续整数的num删除
最后每次操作更新result
让每个循环的n-window大小(即修改次数)去比谁最小
Code:
impl Solution {
pub fn min_operations(mut nums: Vec<i32>) -> i32 {
let n = nums.len() as i32;
nums.sort_unstable();
nums.dedup();
let mut result = n;
let mut left = 0;
for (right, &num) in nums.iter().enumerate() {
while left < nums.len() && nums[left] < num + n {
left += 1;
}
result = result.min(n - (left - right) as i32);
}
result
}
}