LeetCode笔记:Biweekly Contest 95
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Biweekly Contest 95相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题只需要按照题意翻译一下就行了,倒是没啥特殊的地方,直接翻译成代码语言就行了。
2. 代码实现
给出python代码实现如下:
class Solution:
def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:
def is_bulky():
if length >= 10000 or width >= 10000 or height >= 10000:
return True
elif length * width * height >= 10**9:
return True
return False
def is_heavy():
return mass >= 100
bulky, heavy = is_bulky(), is_heavy()
if bulky and heavy:
return "Both"
elif bulky:
return "Bulky"
elif heavy:
return "Heavy"
else:
return "Neither"
提交代码评测得到:耗时28ms,占用内存14MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题我的思路就是构建一个计数器,用以维护最后k个数字中出现的元素的个数,要使得判断条件成立,只需要判断这个计数器当中value的计数是否为k即可。
2. 代码实现
给出python代码实现如下:
class DataStream:
def __init__(self, value: int, k: int):
self.cnt = defaultdict(int)
self.k = k
self.value = value
self.nums = []
def consec(self, num: int) -> bool:
self.nums.append(num)
self.cnt[num] += 1
if len(self.nums) > self.k:
self.cnt[self.nums[-1-self.k]] -= 1
return self.cnt[self.value] == self.k
提交代码评测得到:耗时645ms,占用内存50.9MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题一开始我还搞岔了,以为ijk不能重复,且是有序的,结果后来发现这三个不但可以无序,且还是可以重复选择的,因此,我们只需要统计所有位上面1出现的个数即可。
要使得最终的xor结果为1,我们只需要看全部的组合 n 3 n^3 n3当中出现1的个数是多少就行了,假设全部的 n n n个数当中共有 m m m个数在某一位上为 1 1 1,那么,在全部的 n 3 n^3 n3个组合当中,有效值为 1 1 1的个数就是:
d = m × ( n 2 − ( n − m ) 2 ) d = m \\times (n^2 - (n-m)^2) d=m×(n2−(n−m)2)
我们只要看 d d d是奇数还是偶数即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def xorBeauty(self, nums: List[int]) -> int:
N = 32
def num2digits(num):
digits = [0 for _ in range(N)]
idx = N-1
while num != 0:
digits[idx] = num % 2
num = num // 2
idx -= 1
return digits
def digits2num(digits):
res = 0
for d in digits:
res = res * 2 + d
return res
cnt = [0 for _ in range(N)]
for i, num in enumerate(nums):
digits = num2digits(num)
for j, d in enumerate(digits):
cnt[j] += d
n = len(nums)
res = [0 for _ in range(N)]
for i, d in enumerate(cnt):
res[i] = (d * (n*n - (n-d)*(n-d))) % 2
return digits2num(res)
提交代码评测得到:耗时2242ms,占用内存27.8MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题坦率地说是看了一下大佬们的解答找到的思路,一开始想岔了,后来看了一下之后发现其实还是一个二分法,用二分找到最大的可行值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def maxPower(self, stations: List[int], r: int, k: int) -> int:
n = len(stations)
cumsum = list(accumulate(stations))
low, high = min(stations), sum(stations) + k+1
def is_valid(tgt):
extra = []
power = 0
cnt = 0
for i in range(n):
while extra != [] and i-extra[0][0] > r:
power -= extra[0][1]
extra.pop(0)
lo = cumsum[i-r-1] if i-r-1 >= 0 else 0
hi = cumsum[i+r] if i+r < n else cumsum[-1]
p = hi-lo + power
if p < tgt:
delta = tgt-p
idx = i + r if i+r < n else n-1
extra.append((idx, delta))
power += delta
cnt += delta
if cnt > k:
return False
return True
while high - low > 1:
mid = (high + low) // 2
if is_valid(mid):
low = mid
else:
high = mid
return low
提交代码评测得到:耗时7586ms,占用内存26.6MB。
以上是关于LeetCode笔记:Biweekly Contest 95的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode笔记:Biweekly Contest 79
LeetCode笔记:Biweekly Contest 93
LeetCode笔记:Biweekly Contest 89
LeetCode笔记:Biweekly Contest 69