第 314 场周赛 总结
处理用时最长的那个任务的员工
一遍遍历,当遇到时间更长的更新标记,如果时间相等但序号更小更新标记
class Solution:
def hardestWorker(self, n: int, logs: List[List[int]]) -> int:
res=0
Max=0
now=0
for l in logs:
t=l[1]-now
if t>Max:
res=l[0]
Max=t
elif t==Max:
res=min(res,l[0])
now=l[1]
return res
找出前缀异或的原始数组
又是位运算的题目,前不久也遇到过,感觉这类位运算题目就是找规律,或者运用位运算的机制
A xor B = C
A xor C = B
这道题用到如上的位运算法则,那就很简单了
class Solution:
def findArray(self, pref: List[int]) -> List[int]:
res=[pref[0]]
for i in range(1,len(pref)):
res.append(pref[i-1]^pref[i])
return res
使用机器人打印字典序最小的字符串
就是模拟题,每次在s中找到最小的字母所在位置,
将t末尾所有小于等于s最小字母的字母加入结果,
然后将s之前的字符放入t字符串中,更新s,
class Solution:
def robotWithString(self, s: str) -> str:
t=[]
s=list(s)
res=[]
while s:
temp=[]
pos='z'
for i in range(len(s)):
if pos>s[i]:
pos=s[i]
temp=[]
temp.append(i)
elif pos==s[i]:
temp.append(i)
while t and t[-1]<=pos:
res.append(t[-1])
t.pop(-1)
tar=-1
for te in temp:
t.extend(s[tar+1:te])
res.append(s[te])
tar=te
s=s[temp[-1]+1:]
while t:
res.append(t[-1])
t.pop(-1)
return ''.join(res)
矩阵中和能被 K 整除的路径
一眼动态规划,但是不会写,虽然想到了以余数开始做,
感觉每次遇到动规脑子就没了,下次努力,
放一个dalao代码
class Solution:
def numberOfPaths(self, grid: List[List[int]], k: int) -> int:
MOD = 10 ** 9 + 7
m, n = len(grid), len(grid[0])
f = [[[0] * k for _ in range(n + 1)] for _ in range(m + 1)]
f[0][1][0] = 1
for i, row in enumerate(grid):
for j, x in enumerate(row):
for v in range(k):
f[i + 1][j + 1][(v + x) % k] = (f[i + 1][j][v] + f[i][j + 1][v]) % MOD
return f[m][n][0]
总结
国庆过的很舒服,但是一下子7天就没了,
下次就是寒假,哭了