LeetCode笔记:Biweekly Contest 98

本文是LeetCodeBiweeklyContest98的解题笔记,涉及四道题目,包括最大差值、最小得分、最小不可能OR值的计算,使用Python语言实现解题算法。对于第四题,作者提出了更新和查询操作的难点在于如何快速维护和获取nums1的求和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题思路上比较直接,就是分别找到最大和最小的变换数字,然后求差即可。

而要获得最大/最小的数,只需要把从头开始的第一个不是9/0的数字全部换为9/0即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minMaxDifference(self, num: int) -> int:
        s = str(num)
        
        def replace(s, tgt):
            src = ""
            res = []
            for ch in s:
                if ch != tgt and src == "":
                    src = ch
                if ch == src:
                    res.append(tgt)
                else:
                    res.append(ch)
            return int("".join(res))
        
        return replace(s, "9") - replace(s, "0")

提交代码评测得到:耗时40ms,占用内存13.8MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题要获得所有可能中的最小值,我们只要分别令low和high均能取到最小即可。

事实上,我们总可以令low为0,而要令high最小,其实就是让排序之后的首尾数据差值最小,因此,事实上我们就是比较以下三种情况中的最小值:

  1. 最大元素与第三小元素的差值;
  2. 第二大元素与第二小元素的差值;
  3. 第三大元素与最小元素的差值;

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimizeSum(self, nums: List[int]) -> int:
        nums = sorted(nums)
        return min(nums[-1]-nums[2], nums[-3]-nums[0], nums[-2]-nums[1])

提交代码评测得到:耗时362ms,占用内存26.7MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题通过反证法不难证明,最小的无法被构成的数一定是2的幂次方,且其只能靠自己来实现。

因此,我们只需要依序不断的考察2的幂次是否存在于给定的数组当中即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minImpossibleOR(self, nums: List[int]) -> int:
        nums = set(nums)
        res = 1
        for _ in range(32):
            if res not in nums:
                return res
            res *= 2
        return res

提交代码评测得到:耗时494ms,占用内存30.1MB。

4. 题目四

给出题目四的试题链接如下:

这一题放弃了,实在是没啥思路,主要是关于第一个操作,对于第二、第三个操作,我们只需要不断地维护一下nums2的数组之和即可,而关于第二个操作,我们事实上就是在nums2原有的和的基础上加上 p × ∑ ( n 1 i ) p \times \sum(n_{1i}) p×(n1i)

但是问题就是如何在频繁地进行1操作之后能够快速地维护和获取nums1的数据求和,这个暂时没有想到一个很好的思路,就卡在这个里面了……

如果有大佬知道这个问题的解法的话请务必指导一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值