力扣416周赛

举报垃圾信息

题目

3295. 举报垃圾信息 - 力扣(LeetCode)

思路

直接模拟就好了,这题居然是中等难度

代码

public boolean reportSpam(String[] message, String[] bannedWords) {
        Map<String,Integer> map = new HashMap<>();
        for(String msg:bannedWords){
            map.put(msg,0);
        }
        int sum = 0;
        for(String msg:message){
            if(map.containsKey(msg)){
                sum++;
            }
            
            if(sum==2){
                return true;
            }
        }
        return false;
    }

移山所需要的最少秒数

题目

3296. 移山所需的最少秒数 - 力扣(LeetCode)

思路

  • 二分查找法:为了找到最少时间,可以考虑使用二分查找的方法。我们在 0 到 totalTime(所有工人将山的高度降为0所需的最大时间)之间进行二分查找。
  • 判断是否可行:给定一个 mid 时间,我们判断是否可以在 mid 时间内将山的高度降为0。如果可以,则说明可能有更少的时间,我们可以尝试更短的时间(减少 right);否则,说明时间不够,需要增加时间(增加 left)。
  • 如何判断是否可行:我们需要检查所有工人能在 mid 时间内最多能降低的高度总和。如果所有工人能在 mid 时间内降低的总高度大于或等于 mountainHeight,说明时间是可行的。

代码

public class Solution {
    public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {
        // 二分查找的左边界是0,右边界是所有工人以最快的速度降低山的高度总时间
        long left = 0, right = (long) workerTimes[0] * mountainHeight * (mountainHeight + 1) / 2;

        while (left < right) {
            long mid = left + (right - left) / 2;
            if (canReduceToZero(mountainHeight, workerTimes, mid)) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }

        return left;
    }

    // 判断是否可以在给定的时间内将山的高度降低到 0
    private boolean canReduceToZero(int mountainHeight, int[] workerTimes, long timeLimit) {
        long totalHeightReduced = 0;

        for (int time : workerTimes) {
            // 二分查找可以在 timeLimit 内降低的最大高度
            long left = 0, right = mountainHeight;
            while (left < right) {
                long mid = left + (right - left + 1) / 2;
                if (time * mid * (mid + 1) / 2 <= timeLimit) {
                    left = mid;
                } else {
                    right = mid - 1;
                }
            }

            totalHeightReduced += left;
            if (totalHeightReduced >= mountainHeight) {
                return true;
            }
        }
        return totalHeightReduced >= mountainHeight;
    }

}

总结

剩下两题没做出来,很难评,出这么难,不要命了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值