随笔分类 -  leetcode / leetcode高频题

摘要:[题目链接](188. 买卖股票的最佳时机 IV - 力扣(LeetCode)) 解题思路:来到i位置,决定买或者不卖,动态规划,直接加dp表即可。 需要多一个状态位,来到i时,手中是否有股票 代码 class Solution: # 当前来到index位置,还可以买k次,state为0,则手里没有 阅读全文
posted @ 2025-01-09 14:07 ouyangxx 阅读(5) 评论(0) 推荐(0) 编辑
摘要:[题目链接](179. 最大数 - 力扣(LeetCode)) 解题思路:x拼接y大于y拼接x后,那么x就应该放前面。自定义排序就行了。 还要注意把前导0给去掉 代码 class Solution: def myCompare(self, x, y): # 比较两个字符串拼接后的结果 if str( 阅读全文
posted @ 2025-01-09 11:15 ouyangxx 阅读(4) 评论(0) 推荐(0) 编辑
摘要:[题目链接](172. 阶乘后的零 - 力扣(LeetCode)) 解题思路:首先得知道,n!一共有多少个0,取决于什么。取决于1~n所有2的因数的个数和5的因数的个数。因为0,其实就是2*5得到的。 怎么用对数时间计算1~n,2因子的个数? 一种特殊的是2的幂次的,比如2、4、8、16,含有2因子 阅读全文
posted @ 2025-01-09 10:58 ouyangxx 阅读(4) 评论(0) 推荐(0) 编辑
摘要:[题目链接](171. Excel 表列序号 - 力扣(LeetCode)) 解题思路:其实就是26进制 代码 class Solution: def titleToNumber(self, columnTitle: str) -> int: ans = 0 for s in columnTitle 阅读全文
posted @ 2025-01-09 10:34 ouyangxx 阅读(8) 评论(0) 推荐(0) 编辑
摘要:[题目链接](169. 多数元素 - 力扣(LeetCode)) 解题思路:想象一个打怪的场景。有很多个部落,不同的部落之间会相互攻击。找到大于一半数目的元素。假设是x这个部落。就算其他的部落全部一起攻击这个部落,这个部落仍然会赢,因为大于了一半。 用一个变量:HP,代表现在还剩的血量 另一个变量c 阅读全文
posted @ 2025-01-09 10:12 ouyangxx 阅读(5) 评论(0) 推荐(0) 编辑
摘要:[题目链接](162. 寻找峰值 - 力扣(LeetCode)) 解题思路:题目有一个很重要的前提是:对于所有有效的 i 都有 nums[i] != nums[i + 1]。先看开头和结尾,如果nums[0] > nums[1]或者nums[n - 1] > nums[n - 2],那么可以直接返回 阅读全文
posted @ 2025-01-09 10:04 ouyangxx 阅读(4) 评论(0) 推荐(0) 编辑
摘要:[题目连接](160. 相交链表 - 力扣(LeetCode)) 解题思路:短链表长度为x,长链表长度为y,想让长链表走y - x,然后两个链表同时走,如果相遇直接返回,否则返回空即可。 注意,题目明确了,两个链表无环 代码 class Solution: def getIntersectionNo 阅读全文
posted @ 2025-01-09 09:35 ouyangxx 阅读(4) 评论(0) 推荐(0) 编辑
摘要:[题目链接](155. 最小栈 - 力扣(LeetCode)) 解题思路:一个栈用来存储数据(数据栈),另一个栈用来放当前的最小值(最小栈)。 当前最小值是什么?push一个数x,如果最小栈不为空,且最小栈栈顶元素小于x,那么接着push最小栈栈顶元素;否则push当前的x pop时,两个栈同时po 阅读全文
posted @ 2025-01-09 09:22 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:[题目链接](152. 乘积最大子数组 - 力扣(LeetCode)) 解题思路:子数组问题,考虑【以i结尾】结果是什么,求出所有的结果,最大的那个就是结果。 【以i结尾】结果是什么?我们可以利用【i-1】计算过的内容。 nums[i]如果是0,那么结果就是0 nums[i]如果大于0,那么我们就希 阅读全文
posted @ 2025-01-08 21:22 ouyangxx 阅读(9) 评论(0) 推荐(0) 编辑
摘要:[题目链接](150. 逆波兰表达式求值 - 力扣(LeetCode)) 解题思路:用一个栈,遇到数字压进去,遇到运算符则计算后压入栈 代码 class Solution: def evalRPN(self, tokens: List[str]) -> int: stack = [] ans = 0 阅读全文
posted @ 2025-01-08 21:01 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:[题目链接](149. 直线上最多的点数 - 力扣(LeetCode)) 解题思路:两个for循环。某一条直线,必须经过第一个点,最多经过多少点?某一条直线,必须经过第二个点,最多经过多少个点?以此类推,最多的那个结果,就是答案。 怎么知道必须经过某个点的【直线】,最多经过多少点?例如现在必须经过的 阅读全文
posted @ 2025-01-08 20:18 ouyangxx 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:在链表上使用排序算法。注意,不能使用快排,因为快排的最差时间复杂度是O(n^2),数组形式的快排,以随机数划分能够得到O(n*logn),但是链表的形式,不太好以随机数的方式划分。所以最好的排序方法是使用归并排序。 先用快慢指针,将链表分成两部分,然后两部分分别归并排序,得到两个 阅读全文
posted @ 2024-12-27 17:15 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:用链表+哈希表。链表从头串到尾,淘汰时,从尾部开始淘汰。每次get时,如果找到了,则把这个节点移到头部。每次put,新建一个节点,放在头部,如果容量不够了,则淘汰尾部的数据。哈希表的作用是,能快速通过key找到链表中的节点。 代码 class LRUCache: class No 阅读全文
posted @ 2024-12-27 16:35 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:一个快指针,一个慢指针,如果二者相等了,说明有环。如果快指针为空了,说明没环 代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # s 阅读全文
posted @ 2024-12-27 15:35 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:和139题类似,只不过要把所有的结果存起来而已 代码 class Solution: def check(self, s: str, i: int, s2: str) -> int: if i + len(s2) > len(s): return -1 for ch in s2: 阅读全文
posted @ 2024-12-27 15:13 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:暴力递归+缓存,也就是自顶向下的动态规划。process(s, index, wordDict),s[index..]后面的能被wordDict拼出来吗?使用一个for循环,尝试wordDict中的所有单词。然后加一个缓存表,就可以了 代码 class Solution: # s 阅读全文
posted @ 2024-12-27 14:58 ouyangxx 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:先拷贝新节点,新节点放在老节点后面。然后再遍历一遍,设置新节点的random指针。新节点的random,指向的是「老节点的random的下一个节点」。最后将新老节点分开即可。 代码 class Solution: def copyRandomList(self, head: 'O 阅读全文
posted @ 2024-12-27 14:36 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:只出现一次,其余的数全部两次,异或操作,其余两次的数异或之后,全部变成了0. 代码 class Solution: def singleNumber(self, nums: List[int]) -> int: return reduce(lambda x, y : x ^ y, 阅读全文
posted @ 2024-12-27 11:27 ouyangxx 阅读(8) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:回溯,尝试每一种可能,process(s, i),划分s[i...],当前的回文子串有哪些情况?单独一个i,或者i, i+1,或者i, i+1, i+2,因此,用一个for循环解决。然后再检查[i, j]是否是回文子串,如果是,则继续递归,划分下一个回文子串process(s, 阅读全文
posted @ 2024-12-27 10:30 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:题目链接 解题思路:通常想法是,把哪些'O'变成'X',这种想法很难做。一个比较简单点是,「哪些'O'不能变成'X'」。其实就是与第一行,最后一行,第一列,最后一列,「相邻的这些」'O',不能变成'X',其他的都能变成' X'. 具体来说,把第一行、最后一行、第一列、最后一列的'O',通过「感染」函 阅读全文
posted @ 2024-12-26 18:29 ouyangxx 阅读(5) 评论(0) 推荐(0) 编辑

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