leetcode 第 314 场周赛

第 314 场周赛 总结

  • 处理用时最长的那个任务的员工
  • 找出前缀异或的原始数组
  • 使用机器人打印字典序最小的字符串
  • [矩阵中和能被 K 整除的路径](https://leetcode.cn/problems/paths-in-matrix-whose-sum-is-divisible-by-k/)
  • 总结




处理用时最长的那个任务的员工

一遍遍历,当遇到时间更长的更新标记,如果时间相等但序号更小更新标记

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天就没了,
下次就是寒假,哭了

你可能感兴趣的:(leetcode周赛,leetcode,算法)