leetcode 第 314 场算法比赛

作者: | 更新日期:

这次比赛不过国庆加班没参加。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

零、背景

四道题都很简单。

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

题意:按时间顺序给出任务的完成时间,上个任务完成时下个任务才开始。
第一个任务开始时间是 0 时刻,问处理时间最长的那个任务,如果有多个,输出id 较小的那个。

思路:循环计算出任务时长,比大小即可。

二、找出前缀异或的原始数组

题意:给出一个数组所有的前缀异或值,求原数组。

思路:相邻前缀异或值进行异或,就可以得到后面位置的值。
循环进行异或即可。

三、使用机器人打印字典序最小的字符串

题意:给一个字符串 s 和一个空字符串 t,有两个操作:
1)将 s 字符串的首个字母移动到 t 字符串最后。
2)将 t 字符串最后的字符删除。
求删除的字符顺序的最小字典序。

思路:

对于 t 串,后进先出,是一个栈。
栈删除字母的顺序是固定的。

对于 s 串,可以通过栈来调整删除字母的顺序,顺序是可以调整的。

想要字典序最小,删除的首个字母肯定是整个串中最小的。
所以可以按下面步骤操作。

1) 循环删除 t 串,直到遇到第一个最小的字符,并删除。
2) 最小的删除后,对于栈下个删除的是栈顶字符,对于 s 串,可以选择剩余里面最小的字符。
2.1) 如果栈顶更小,那就删除栈顶。此时依旧在步骤 2 里面判断。
2.2) 如果 s 串中的更小,则进入步骤1 进行操作。

对于上面的算法,需要从后到前预处理得到 s 后缀中的第一个最小字符的位置。

复杂度:O(n)

四、矩阵中和能被 K 整除的路径

题意:给一个矩阵,问从左上角到右下角的路径和里,可以整除 K 的路径有多少。

思路:动态规划。

状态定义: dp(k, x, y) 代表从左上角到 (x,y) 的路径和为 k 的路径数。

状态转移方程:

dp(k, x, y) = dp(k-val(x,y), x-1, y) + dp(k-val(x,y), x, y-1)

五、最后

这次比赛的题目很简单,第三题比第四题难点。

Leetcode 秋季团队赛的题解晚点才能写出来,如果一周内没写出来,那可能就不会写了。

加油,算法人。

《完》

-EOF-

本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越