LeetCode笔记:Biweekly Contest 98
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Biweekly Contest 98相关的知识,希望对你有一定的参考价值。
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最小,其实就是让排序之后的首尾数据差值最小,因此,事实上我们就是比较以下三种情况中的最小值:
- 最大元素与第三小元素的差值;
- 第二大元素与第二小元素的差值;
- 第三大元素与最小元素的差值;
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的数据求和,这个暂时没有想到一个很好的思路,就卡在这个里面了……
如果有大佬知道这个问题的解法的话请务必指导一下!
以上是关于LeetCode笔记:Biweekly Contest 98的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode笔记:Biweekly Contest 79
LeetCode笔记:Biweekly Contest 93
LeetCode笔记:Biweekly Contest 89
LeetCode笔记:Biweekly Contest 69