Leetcode - 145双周赛

目录

一,3375. 使数组的值全部为 K 的最少操作次数

二,3376. 破解锁的最少时间 I

三,3377. 使两个整数相等的数位操作

四,3378. 统计最小公倍数图中的连通块数目


一,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 {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶祇秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值