复盘|第314场周赛
6200. 处理用时最长的那个任务的员工 https://leetcode.cn/problems/the-employee-that-worked-on-the-longest-task/
【模拟】题意是要找用时最长的最小的idx,那么可以用两个变量分别记录最长time和最小idx,碰到更大的time或一样大的time但是更小的idx便可以更新max_time和min_idx。
6201. 找出前缀异或的原始数组 https://leetcode.cn/problems/find-the-original-array-of-prefix-xor/
【位运算】前缀异或和还原回原数组,直接两两异或即可,可以原地修改省空间。(小技巧:内置函数xor比^快一点点)
6202. 使用机器人打印字典序最小的字符串 https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/
题意是允许使用一个栈,求出栈的字符序列中字典序最小的那个。打印顺序是abcdefg…,所以必然要先把所有a打印,再去依次打印b、c.. 注意在找到最后一个a之前的所有字符都是逆序打印的。
【栈 + 模拟】按题意模拟栈的进出,st[-1]为最小才能出栈。用cnt记录s中字符数量,入栈一个字符,数量减一。
【栈 + 贪心】可以用长度为26的数组记录每种字符的数目。
6203. 矩阵中和能被 K 整除的路径 https://leetcode.cn/problems/paths-in-matrix-whose-sum-is-divisible-by-k/
【记忆化搜素】定义dfs(i,j,v)为从(i,j)出发,当前路径和%k =v时的路径数量。注意需加cache和cache_clear不然会爆内存,最后int(ans)是防止值很小时返回bool值。
【DP】定义dp[i] [j] [v]为从(0,0)走到(i,j)且路径和%k=v的路径数,初始值dp[0] [0] [grid[0] [0] mod k] = 1,ans = dp[m - 1] [n - 1] [0],转移方程(刷表法): dp[i] [j] [(v + grid[i] [j]) mode k] = dp[i] [j - 1] [v] + dp[i - 1] [j] [v]。(为了避免判断是否越界可以把下标整体加一,i → i + 1,j → j + 1)