随笔分类 -  leetcode

1 2 3 4 5 ··· 7 下一页
摘要:题目链接 思路 子数组题目,首先想到以i开头,或者以i结尾是什么情况。 所有的数字是正数,因此有很明显的单调性:大子数组符合要求,那么小子数组肯定符合要求;小子数组不符合要求,大子数组肯定不符合要求。因此,可以使用滑动窗口,若[L, R]满足,那么看R++是否满足;若R不满足了,此时可以结算,以L开 阅读全文
posted @ 2025-04-28 10:38 ouyangxx 阅读(12) 评论(0) 推荐(0)
摘要:题目链接 解题思路:题目意思就是,每个物品,有价格和美丽值,我现在有x钱,能买到的最大的美丽值是多少。最容易想到的就是,先按照价格排序,然后再二分法,找到小于等于x,最右侧的位置。但是这里有两个问题1)钱越多,美丽值越大?例如(1, 10), (2, 5),价格为2,美丽值反而变小了;2)相同的价钱 阅读全文
posted @ 2025-03-09 17:10 ouyangxx 阅读(24) 评论(0) 推荐(0)
摘要:题目链接 解题思路:将区域划分成非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 阅读(15) 评论(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 阅读(41) 评论(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 阅读(13) 评论(0) 推荐(0)
摘要:题目链接 解题思路:不用管字母的顺序,只用管相同字母的个数。用哈希表,或者题目指明了只有小写字母,所以可以用数组来代替哈希表 代码 class Solution: def isAnagram(self, s: str, t: str) -> bool: has = [0] * 26 # 26个字母 阅读全文
posted @ 2025-02-16 10:21 ouyangxx 阅读(12) 评论(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 阅读(18) 评论(0) 推荐(0)
摘要:题目链接 解题思路:使用一个队列,队头的就是当前窗口内的最大值。队头到队尾是依次减小的。队中的其他元素是【最大值候选者】。假设当前窗口内值为4, 3, 1, 2,那么队列就是4, 3, 2,为什么?4可能是最大值吗?可能,现在就是最大值。3可能是最大值吗?可能,如果把4淘汰了,就可能是最大值了。1可 阅读全文
posted @ 2025-02-15 20:50 ouyangxx 阅读(19) 评论(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 阅读(26) 评论(0) 推荐(0)
摘要:题目链接 解题思路:二叉树递归套路。从左儿子收集信息,从右儿子收集信息,然后得到本节点的信息,再返回给自己的父亲节点。 从儿子收集什么信息? 左儿子是否包含p?左儿子是否包含q?右儿子是否包含p?右儿子是否包含q 任意一个儿子包含p,那么本节点就包含p,任意一个儿子包含q,那么本节点就包含q 如果该 阅读全文
posted @ 2025-02-13 16:12 ouyangxx 阅读(14) 评论(0) 推荐(0)
摘要:题目链接 解题思路:二叉搜索树,中序遍历,就是有序的,就可以依次得到第K小的数了 代码 class Solution: # 中序遍历 就是从小到大遍历 def kthSmallest(self, root: Optional[TreeNode], k: int) -> int: stack = [] 阅读全文
posted @ 2025-02-13 15:20 ouyangxx 阅读(16) 评论(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 阅读(12) 评论(0) 推荐(0)
摘要:题目链接 解题思路:使用优先级队列,大小是K,小根堆。遍历数组,当前数为num,如果num小于堆顶,那么num不可能是结果,如果num大于堆顶,那么就把堆顶元素弹出去,同时把num放入优先级队列,依次遍历完数组,堆顶元素就是答案。 为什么正确? 因为优先级队列保持着【当前最大的k个元素】,而堆顶则是 阅读全文
posted @ 2025-02-13 11:29 ouyangxx 阅读(15) 评论(0) 推荐(0)
摘要:题目链接 解题思路:来到index位置,决定偷,或者不偷。但是有一个问题,来到最后一个位置的时候,可以偷吗?因为房屋是一个圆圈,如果第一个位置偷了,那么最后一个位置就不能偷,那么暴力递归时,怎么知道呢? 将问题解耦成两个问题,第一个房间偷+第一个房间不偷。第一个房间偷,那么最后一个房间必不能偷;第一 阅读全文
posted @ 2025-02-13 10:39 ouyangxx 阅读(19) 评论(0) 推荐(0)
摘要:[题目链接](210. 课程表 II - 力扣(LeetCode)) 解题思路:和[课程表Ⅰ](207. 课程表 - ouyangxx - 博客园)思路一致,只不过每次都要收集答案。 代码 class Solution: class node: def __init__(self): self.pr 阅读全文
posted @ 2025-01-13 11:19 ouyangxx 阅读(19) 评论(0) 推荐(0)
摘要:[题目链接](208. 实现 Trie (前缀树) - 力扣(LeetCode)) 解题思路:前缀树,每个节点的内容:pre:经过该节点的数目;end:以该节点结尾的数目;nexts:下一条路径。前缀树有一个根节点,每次查找、插入、删除都要从这个节点开始。 插入时,遍历该字符串,先从根节点开始,查看 阅读全文
posted @ 2025-01-10 09:39 ouyangxx 阅读(29) 评论(0) 推荐(0)
摘要:[题目链接](207. 课程表 - 力扣(LeetCode)) 解题思路:拓扑排序。有一个可以完成的课程集合set1,有一个需要完成的课程集合set2。每次从set1中拿出一个课程,然后把其影响的节点的入度减减,如果减成了0,则该节点,变成了可以完成的课程,加入set1。依次做下去,如果set2空了 阅读全文
posted @ 2025-01-09 16:21 ouyangxx 阅读(59) 评论(0) 推荐(0)
摘要:[题目链接](202. 快乐数 - 力扣(LeetCode)) 解题思路:不是快乐数,那么就会一直循环。所以只需要按照题目意思,每次计算一个数就放入set中,如果遇到1了,直接返回True,如果之前已经存在过set中了,那么直接返回False,否则加入set中 代码 class Solution: 阅读全文
posted @ 2025-01-09 15:58 ouyangxx 阅读(21) 评论(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 阅读(20) 评论(0) 推荐(0)
摘要:[题目链接](198. 打家劫舍 - 力扣(LeetCode)) 解题思路:比较经典的动态规划。从左往右尝试。来到index位置,有两种选择,不偷,那么就去index+1位置做决策,偷,那么就去index + 2做决策。直接加dp表即可。 代码 class Solution: def process 阅读全文
posted @ 2025-01-09 15:37 ouyangxx 阅读(29) 评论(0) 推荐(0)

1 2 3 4 5 ··· 7 下一页