目录
一,3375. 使数组的值全部为 K 的最少操作次数
本题的操作就是将最大值变成次大值,最后将nums数组中的所有值变成 k,但是需要满足条件 nums[i] < k,也就是说如果 min(nums) < k 的话,无法使元素变成 k。
分情况:
- k > min(nums),返回 -1
- k == min(nums),少操作一次,返回 nums 中不同元素的个数 - 1
- k < min(nums),返回 nums 中不同元素的个数
代码如下:
class Solution {
public int minOperations(int[] nums, int k) {
int mn = nums[0];
int n = nums.length;
Set<Integer> set = new HashSet<>();
for(int x : nums){
set.add(x);
mn = Math.min(mn, x);
}
if(mn < k) return -1;
if(set.contains(k)) return set.size() - 1;
return set.size();
}
}
二,3376. 破解锁的最少时间 I
原问题是计算打开 {1,2,3,...,n} 这 n 把锁需要的最少时间,假设第一次打开第 2 把锁,问题就变成了计算 {1,3,...,n} 这 n-1 把锁需要的最少时间。这时就变成了与原问题相同的子问题,可以使用dfs解决了。
代码如下:
class Solution {