leetcode contest 314
第三题竟然时最难的题目了,第四题确实太简单了一点。
6200. 处理用时最长的那个任务的员工
题目
共有 n 位员工,每位员工都有一个从 0 到 n - 1 的唯一 id 。
给你一个二维整数数组 logs ,其中 logs[i] = [idi, leaveTimei] :
idi是处理第i个任务的员工的id,且leaveTimei是员工完成第i个任务的时刻。所有leaveTimei的值都是 唯一 的。
注意,第i个任务在第(i - 1)个任务结束后立即开始,且第0个任务从时刻0开始。
返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足,则返回几人中 最小 的 id 。
示例 1:
输入:n = 10, logs = [[0,3],[2,5],[0,9],[1,15]] |
示例 2:
输入:n = 26, logs = [[1,1],[3,7],[2,12],[7,17]] |
示例 3:
输入:n = 2, logs = [[0,10],[1,20]] |
提示:
2 <= n <= 5001 <= logs.length <= 500logs[i].length == 20 <= idi <= n - 11 <= leaveTimei <= 500idi != idi + 1leaveTimei按严格递增顺序排列
地址
https://leetcode.cn/problems/the-employee-that-worked-on-the-longest-task/
题意
直接模拟
思路
- 题目比较怪异,不是很好的题目,直接模拟即可。
- 复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 为数组的长度。
- 空间复杂度:$O(1)$。
代码
class Solution { |
6201. 找出前缀异或的原始数组
题目
给你一个长度为 n 的 整数 数组 pref 。找出并返回满足下述条件且长度为 n 的数组 arr :
pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i].
注意 ^ 表示 按位异或(bitwise-xor)运算。
可以证明答案是 唯一 的。
示例 1:
输入:pref = [5,2,0,3,1] |
示例 2:
输入:pref = [13] |
提示:
1 <= pref.length <= 1050 <= pref[i] <= 106
地址
https://leetcode.cn/problems/find-the-original-array-of-prefix-xor/
题意
数学问题
思路
- 非常简单的踢腿公式即可。我们知道 $arr[0] = pref[0]$,根据题意可知 $pref[i] = arr[0] \oplus arr[1] \cdots arr[i]$,所以可以知道:
$$
arr[i] = pref[i] \oplus arr[0] \oplus arr[1] \cdots arr[i - 1]
$$
我们根据上述公式依次求出 $arr$ 即可。 - 复杂度分析:
- 时间复杂度:时间复杂度为 $O(n)$,其中 $n$ 表示数组的长度。
- 空间复杂度:空间复杂度为 $O(1)$。
代码
class Solution { |
6202. 使用机器人打印字典序最小的字符串
题目
给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串:
- 删除字符串
s的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到t的尾部。 - 删除字符串
t的 最后一个 字符,并将该字符给机器人。机器人将该字符写到纸上。
请你返回纸上能写出的字典序最小的字符串。
示例 1:
输入:s = "zza" |
示例 2:
输入:s = "bac" |
示例 3:
输入:s = "bdda" |
提示:
1 <= s.length <= 105s只包含小写英文字母。
地址
https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/
题意
贪心
思路
- 经典的贪心算法问题,即求最大或者最小出栈顺序,我们可以将 $t$ 看做一个栈,求字典序最小的出栈顺序;往上可以搜到原题。
- 为保证出栈顺序最小,我们首先将元素压入到栈中,如果发现剩余未入栈的字符串中没有比当前元素更小的字符时,应该将栈顶元素出栈。
- 复杂度分析
- 时间复杂度:时间复杂度为 $O(n)$,$n$ 为字符串的长度。
- 空间复杂度:时间复杂度为 $O(n)$,$n$ 为字符串的长度。
代码
class Solution { |
6203. 矩阵中和能被 K 整除的路径
题目
给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1) 。
请你返回路径和能被 k 整除的路径数目,由于答案可能很大,返回答案对 109 + 7 取余 的结果。
示例 1:
输入:grid = [[5,2,4],[3,0,5],[0,7,2]], k = 3 |
示例 2:
输入:grid = [[0,0]], k = 5 |
示例 3:
输入:grid = [[7,3,4,9],[2,3,6,2],[2,3,7,0]], k = 1 |
提示:
m == grid.lengthn == grid[i].length1 <= m, n <= 5 * 1041 <= m * n <= 5 * 1040 <= grid[i][j] <= 1001 <= k <= 50
地址
https://leetcode.cn/problems/maximum-deletions-on-a-string/description/
题意
动态规划
思路
- 太常规的题目了,基本上看到就知道思路的题目,设 $dp[i][j][s]$ 表示经过 $(i,j)$ 且路径和对 $k$ 取模为 $s$ 的路径数目,则可以知道递推公式:
$$
dp[i][j][k] = dp[i-1][j][(k - grid[i][j]) \mod k] + dp[i][j][(k - grid[i][j]) \mod k]
$$
非常简单的动态规划的思路,没有太大难度。 - 复杂度分析:
- 时间复杂度:$O(m \times n \times k)$,其中 $m,n$ 表示给定的矩阵的行数与列数。
- 空间复杂度:$O(m \times n)$,其中 $m,n$ 表示给定的矩阵的行数与列数。
代码
class Solution { |
欢迎关注和打赏,感谢支持!
- 关注我的博客: http://mikemeng.org/
- 关注我的知乎:https://www.zhihu.com/people/da-hua-niu
- 关注我的微信公众号: 公务程序猿

扫描二维码,分享此文章