今天这次周赛是手速场,技巧性不是很强
5605. 检查两个字符串数组是否相等(3分,通过率:2853/3210)
给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。
数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
class Solution:
def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
return "".join(word1) == "".join(word2)
5606. 具有给定数值的最小字符串(4分,通过率:2137/4071)
贪心算法
class Solution:
def getSmallestString(self, n: int, k: int) -> str:
ans = ""
k-=n
while(k>0):
if k>=25:
k-=25
ans += "z"
else:
ans += chr(ord("a")+k)
k = 0
n -= 1
while n:
ans += "a"
n-= 1
return ans[::-1]
5607. 生成平衡数组的方案数(5分,通过率:1621/3664)
前缀和,将字符串分割为3部分,当断点一步一步后移时,前半部奇偶性不变,后半部分奇偶性反转
class Solution:
def waysToMakeFair(self, nums: List[int]) -> int:
len_ = len(nums)
if len_ == 1:
return 1
j_,o_ = 0,0
o = sum(nums[1:len_:2])
j = sum(nums[2:len_:2])
ans = 0 if j^o else 1
for i in range(1,len_):
if i&1:
o -= nums[i]
o_ += nums[i-1]
else:
j -= nums[i]
j_ += nums[i-1]
if not (j_+j)^(o_+o):
ans +=1
return ans
5608. 完成所有任务的最少初始能量(6分,通过率:959/1979)
本题的局部最优解就是全局最优解,因此每次只需选择某个task,使余下的能量最少即可
class Solution:
def minimumEffort(self, tasks: List[List[int]]) -> int:
tasks.sort(key=lambda x:x[1]-x[0])
ans = 0
for i in tasks:
ans = max(i[1],ans+i[0])
return ans