随笔分类 -  leetcode / leetcode高频题

摘要:题目链接 解题思路:将区域划分成非0区域,0区域,待遍历区域,待遍历区域就是还没有遍历到的数集合。 非0区域用L表示,即[0, L - 1]是非0区域,初始值L = 0 待遍历区域,就是[i, n - 1],其中n是数组长度 0区域就是[L, i - 1] 直接看代码 代码 class Soluti 阅读全文
posted @ 2025-02-17 10:54 ouyangxx 阅读(0) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:先想一下暴力怎么做。直接看代码更清晰 # rest:还剩下的数字 def process(self, rest): if rest == 0: return 0 ans = 2 ** 31 - 1 # 从1开始尝试,最多尝试到sqrt(rest) for i in range(1 阅读全文
posted @ 2025-02-17 10:44 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:利用原有的数组,i位置上的数就是nums[i],但是这里有一个问题,就是如果这个数是n,怎么办?n不能够放到nums[n]上。用一个变量n_index来存n这个数的位置(假设有n这个数),初始化为-1 第一种情况:没有n这个数,那么[0, n-1]上都已经放好了,此时n_inde 阅读全文
posted @ 2025-02-16 10:55 ouyangxx 阅读(0) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:不用管字母的顺序,只用管相同字母的个数。用哈希表,或者题目指明了只有小写字母,所以可以用数组来代替哈希表 代码 class Solution: def isAnagram(self, s: str, t: str) -> bool: has = [0] * 26 # 26个字母 阅读全文
posted @ 2025-02-16 10:21 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:从右上角点,或者左下角点开始找即可。因为这两个点具有【单调性】 代码 class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: n = len(matrix) m = 阅读全文
posted @ 2025-02-15 20:54 ouyangxx 阅读(0) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:使用一个队列,队头的就是当前窗口内的最大值。队头到队尾是依次减小的。队中的其他元素是【最大值候选者】。假设当前窗口内值为4, 3, 1, 2,那么队列就是4, 3, 2,为什么?4可能是最大值吗?可能,现在就是最大值。3可能是最大值吗?可能,如果把4淘汰了,就可能是最大值了。1可 阅读全文
posted @ 2025-02-15 20:50 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:就是把后面链表的值,依次往前挪,最后一个节点挪完之后,把倒数第二个节点的next指向空即可 代码 class Solution: def deleteNode(self, node): next_node = node.next while next_node.next: nod 阅读全文
posted @ 2025-02-15 20:11 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:二叉树递归套路。从左儿子收集信息,从右儿子收集信息,然后得到本节点的信息,再返回给自己的父亲节点。 从儿子收集什么信息? 左儿子是否包含p?左儿子是否包含q?右儿子是否包含p?右儿子是否包含q 任意一个儿子包含p,那么本节点就包含p,任意一个儿子包含q,那么本节点就包含q 如果该 阅读全文
posted @ 2025-02-13 16:12 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:二叉搜索树,中序遍历,就是有序的,就可以依次得到第K小的数了 代码 class Solution: # 中序遍历 就是从小到大遍历 def kthSmallest(self, root: Optional[TreeNode], k: int) -> int: stack = [] 阅读全文
posted @ 2025-02-13 15:20 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:使用set,遍历数组,如果数组中存在该数,则直接返回True,否则加入set 代码 class Solution: def containsDuplicate(self, nums: List[int]) -> bool: has = set() for num in nums: 阅读全文
posted @ 2025-02-13 14:26 ouyangxx 阅读(0) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:使用优先级队列,大小是K,小根堆。遍历数组,当前数为num,如果num小于堆顶,那么num不可能是结果,如果num大于堆顶,那么就把堆顶元素弹出去,同时把num放入优先级队列,依次遍历完数组,堆顶元素就是答案。 为什么正确? 因为优先级队列保持着【当前最大的k个元素】,而堆顶则是 阅读全文
posted @ 2025-02-13 11:29 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:来到index位置,决定偷,或者不偷。但是有一个问题,来到最后一个位置的时候,可以偷吗?因为房屋是一个圆圈,如果第一个位置偷了,那么最后一个位置就不能偷,那么暴力递归时,怎么知道呢? 将问题解耦成两个问题,第一个房间偷+第一个房间不偷。第一个房间偷,那么最后一个房间必不能偷;第一 阅读全文
posted @ 2025-02-13 10:39 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:[题目链接](210. 课程表 II - 力扣(LeetCode)) 解题思路:和[课程表Ⅰ](207. 课程表 - ouyangxx - 博客园)思路一致,只不过每次都要收集答案。 代码 class Solution: class node: def __init__(self): self.pr 阅读全文
posted @ 2025-01-13 11:19 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:[题目链接](208. 实现 Trie (前缀树) - 力扣(LeetCode)) 解题思路:前缀树,每个节点的内容:pre:经过该节点的数目;end:以该节点结尾的数目;nexts:下一条路径。前缀树有一个根节点,每次查找、插入、删除都要从这个节点开始。 插入时,遍历该字符串,先从根节点开始,查看 阅读全文
posted @ 2025-01-10 09:39 ouyangxx 阅读(6) 评论(0) 推荐(0) 编辑
摘要:[题目链接](207. 课程表 - 力扣(LeetCode)) 解题思路:拓扑排序。有一个可以完成的课程集合set1,有一个需要完成的课程集合set2。每次从set1中拿出一个课程,然后把其影响的节点的入度减减,如果减成了0,则该节点,变成了可以完成的课程,加入set1。依次做下去,如果set2空了 阅读全文
posted @ 2025-01-09 16:21 ouyangxx 阅读(10) 评论(0) 推荐(0) 编辑
摘要:[题目链接](202. 快乐数 - 力扣(LeetCode)) 解题思路:不是快乐数,那么就会一直循环。所以只需要按照题目意思,每次计算一个数就放入set中,如果遇到1了,直接返回True,如果之前已经存在过set中了,那么直接返回False,否则加入set中 代码 class Solution: 阅读全文
posted @ 2025-01-09 15:58 ouyangxx 阅读(5) 评论(0) 推荐(0) 编辑
摘要:[题目链接](200. 岛屿数量 - 力扣(LeetCode)) 解题思路:用感染函数,遇到1,岛屿数目就加1,然后递归把上下左右变成2(以免下次遇到相同的岛屿) 代码 class Solution: # 感染函数,将[i, j]感染 def process(self, grid, i, j): i 阅读全文
posted @ 2025-01-09 15:43 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:[题目链接](198. 打家劫舍 - 力扣(LeetCode)) 解题思路:比较经典的动态规划。从左往右尝试。来到index位置,有两种选择,不偷,那么就去index+1位置做决策,偷,那么就去index + 2做决策。直接加dp表即可。 代码 class Solution: def process 阅读全文
posted @ 2025-01-09 15:37 ouyangxx 阅读(9) 评论(0) 推荐(0) 编辑
摘要:[题目链接](191. 位1的个数 - 力扣(LeetCode)) 解题思路:当成二进制处理即可 代码 class Solution: def hammingWeight(self, n: int) -> int: ans = 0 while n != 0: ans += n % 2 n //= 2 阅读全文
posted @ 2025-01-09 15:33 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:[题目链接](189. 轮转数组 - 力扣(LeetCode)) 解题思路:直接举例子,nums = [1,2,3,4,5,6,7],k=3,步骤:先把5,6,7安排好,即5,6,7,4,1,2,3这是怎么来的?其实可以想象成两部分,一部分是1,2,3,4,另一部分是5,6,7先分别交换,1和5,2 阅读全文
posted @ 2025-01-09 15:30 ouyangxx 阅读(5) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示