leetcode2022
leetcode2022
BJFU_vth
这个作者很懒,什么都没留下…
展开
-
【leetcode】2022.1.9 按键持续时间最长的键
按键持续时间最长的键 分析 这题有两种办法。第一个是排序,先按照字母排好序,然后再按照数字差值进行排序。 排序的话要选择稳定的排序算法(保证字母是有序的)。 也可以用在线处理的办法,同时记录当前最大的差值和对应的字符。 排序法 - O(nlogn) 在线处理法 - O(n) 排序法 class Solution: def slowestKey(self, releaseTimes, keysPressed: str) -> str: if not keysPressed:原创 2022-01-12 11:55:46 · 264 阅读 · 0 评论 -
【leetcode】2022.1.8格雷编码
格雷编码 分析 格雷编码,就是说二进制位只跟相邻位差1位不同的编码,且在一个格雷编码序列中,某个数字只能出现一次。 只差一位可以用镜像+1法。 代码 class Solution: def grayCode(self, n: int): res, head = [0], 1 for i in range(n): for j in range(len(res) - 1, -1, -1): res.append(h原创 2022-01-12 11:16:00 · 3275 阅读 · 0 评论 -
【leetcode】2022.1.7. 括号的最大嵌套深度
1614. 括号的最大嵌套深度 分析 这题一开始没认真读题,没看到给的s是个有效括号字符串。 像这种括号问题,用栈就对了。 代码 class Solution: def maxDepth(self, s: str) -> int: stack = [] res = 0 for i in s: if i == '(': stack.append('(') res原创 2022-01-07 16:10:29 · 2678 阅读 · 0 评论 -
【leetcode】2021.1.6 简化路径
71. 简化路径 分析 这题其实就是考察栈的应用。如果碰到..就pop出去,如果是.就不处理,如果是普通的就压到栈里去。 代码 class Solution: def simplifyPath(self, path: str) -> str: path = path.strip('/') path_li = path.split('/') stack = [] for i in path_li: if i原创 2022-01-07 10:26:45 · 3427 阅读 · 0 评论 -
【leetcode】2022.1.5. 替换所有的问号
1576. 替换所有的问号 分析 这题没啥难的,维护一个set存储所有的字母。看相邻的字母如果在这个set里,就从set中删掉。 然后从set中随机出来一个字母来替换当前的?即可。 代码 class Solution: def modifyString(self, s: str) -> str: mem_set = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',原创 2022-01-05 19:54:08 · 928 阅读 · 0 评论 -
【leetcode】2022.1.4猫和老鼠
913. 猫和老鼠 分析 hard题,而且是个三维dp题。 所以还是看官方题解吧,我讲的肯定没有官方题解好理解。 官方题解长这样: 动态规划法 DRAW = 0 MOUSE_WIN = 1 CAT_WIN = 2 class Solution: def catMouseGame(self, graph) -> int: n = len(graph) dp = [[[-1] * (n * 2) for _ in range(n)] for _ in ra原创 2022-01-04 10:53:51 · 594 阅读 · 0 评论 -
【leetcode】2022.1.3一周中的第几天
一周中的第几天 分析 我们知道了输入范围最早是1971年。那么我们得知1970年12月31日是周几,然后计算出来给定时间和1970年12月31日差几天,根据这个天数模7即可。 模拟法 class Solution: def dayOfTheWeek(self, day: int, month: int, year: int) -> str: return self.get_days(year, month, day) def get_days(self, year, m原创 2022-01-03 15:26:32 · 709 阅读 · 0 评论 -
【leetcode】2022.1.2 消除游戏
390. 消除游戏 分析 这题看完像是抓住了什么,但又像啥也没抓住。 当没有思路的时候,最好的解题思路就是先用最暴力最弱智的办法把它做出来,然后再进行优化。 暴力模拟法 - 真的弄出来个数组,按照他的规则不断的去筛掉其中不符合条件的值,如果剩下的数组长度为1,代表我们找到了目标元素。这种办法肯定会超时的。 数学分析法 - 分析暴力模拟法的思维过程。对于某个数组,我们肯定会先杀掉1,3,5等奇数,然后要分析剩下的数组长度是不是奇数,如果是,证明第一个元素会被干掉,跟第一趟算法是一样的。 暴力模拟法 cla原创 2022-01-02 21:59:54 · 2313 阅读 · 0 评论 -
【leetcode】2022.1.1 将一维数组转变成二维数组
2022. 将一维数组转变成二维数组 2022每日一题,希望能讨个好彩头。 冲啊!做最靠谱的工程师! 分析 这题其实做个模拟就很容易搞定了。就是不断的切割一维数组,搞成二维的。 别忘了异常的处理。 解法 class Solution: def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]: return [original[i*n:(i+1)*n] for i in原创 2022-01-01 23:29:10 · 498 阅读 · 0 评论