leetcode
漂亮国王思聪
这个作者很懒,什么都没留下…
展开
-
212. 单词搜索 II
方法一:前缀树+dfs。原创 2024-06-26 22:31:45 · 118 阅读 · 0 评论 -
51. N 皇后
【代码】51. N 皇后。原创 2024-06-25 11:41:53 · 131 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
【代码】230. 二叉搜索树中第K小的元素。原创 2024-06-19 15:55:15 · 149 阅读 · 0 评论 -
85. 最大矩形
求矩阵面积最大的就是用单调栈(公共模版),固定宽度,让高度尽可能大。原创 2024-06-17 23:31:07 · 380 阅读 · 0 评论 -
84. 柱状图中最大的矩形(hard)
单调栈:原创 2024-06-17 20:46:03 · 134 阅读 · 0 评论 -
42. 接雨水
【代码】42. 接雨水。原创 2024-06-17 12:05:39 · 164 阅读 · 0 评论 -
32. 最长有效括号
方法二:利用stack存储最后一个无法匹配的右括号的下标i,原创 2024-06-16 23:45:47 · 188 阅读 · 0 评论 -
301. 删除无效的括号
【代码】301. 删除无效的括号。原创 2024-06-16 22:44:34 · 222 阅读 · 0 评论 -
312. 戳气球
这是区间问题,f[i][j] 是在{nums[i]::nums[j]}的获得的最大零钱数,跟回文字符串的思路差不多。方法一: i ∈{0:: n-1} 从左往右来看。方法二:i从{n-1:: 0} 从右到左来看。原创 2024-06-16 21:39:30 · 181 阅读 · 0 评论 -
406. 根据身高重建队列
【代码】406. 根据身高重建队列。原创 2024-06-16 20:16:59 · 157 阅读 · 0 评论 -
285. 二叉搜索树中的中序后继
方法一:递归遍历,记录全局变量的父节点,当parent == target的时候,当前节点就是答案。原创 2024-06-16 10:55:23 · 167 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
【代码】450. 删除二叉搜索树中的节点。原创 2024-06-15 23:09:37 · 196 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
方法二:利用二叉搜索树的原理,记录root->target 的path,然后找最近祖先。方法一:二叉树寻找最近公共祖先的通用方法。原创 2024-06-15 18:50:02 · 123 阅读 · 0 评论 -
357. 统计各位数字都不同的数字个数
【代码】357. 统计各位数字都不同的数字个数。原创 2024-06-15 17:21:47 · 202 阅读 · 0 评论 -
leetcode 字符串
方法一:先算出最长公共子序列,在分别(word1.length - f[m][n])+ (word2.length-f[m][n]);方法二:直接定义f[i][j]:word1[0;i]和word2[0:j]变成一样的最小删除次数。原创 2024-06-15 10:10:49 · 296 阅读 · 0 评论 -
309. 买卖股票的最佳时机含冷冻期
题解对状态的描述容易引起误解。f[i][1] 被描述成"不持有任何股票,并且处于冷冻期中,对应的最大收益"。这样的描述让人觉得是这一天是「hold, sell, cooldown」中的第三天,也就是cooldown。那么对应的cooldown的转态转移方程应该是dp[i][1] = dp[i-2][0] + prices[i-1],而不是题解中的dp[i][1]=dp[i−1][0]+prices[i]。我相信这是很多人没法理解的地方。其实只是题解对状态的描述不够清楚。原创 2024-06-14 17:02:17 · 206 阅读 · 0 评论 -
239. 滑动窗口最大值
二:deque,保持队首是滑动窗口的最大值,保持队列中的元素大小为从大到小,但也得要保证队首元素在滑动窗口内,不在的话pop。一:priority_queue,使用k个元素的大顶堆,来组成滑动窗口。保持大顶堆的最大元素在滑动窗口内。原创 2024-06-14 15:14:35 · 161 阅读 · 0 评论 -
334. 递增的三元子序列
【代码】334. 递增的三元子序列。原创 2024-06-13 19:53:02 · 201 阅读 · 0 评论 -
337. 打家劫舍 III
【代码】337. 打家劫舍 III。原创 2024-06-13 18:19:15 · 97 阅读 · 0 评论 -
347. 前 K 个高频元素
使用大顶堆,只保留前k个高频元素(经常看看)原创 2024-06-13 17:32:11 · 80 阅读 · 0 评论 -
leetcode 和为 K 的子数组
【代码】leetcode 和为 K 的子数组。原创 2024-06-10 22:49:20 · 360 阅读 · 0 评论 -
leetcode 括号生成
【代码】leetcode 括号生成。原创 2024-06-10 21:16:29 · 288 阅读 · 0 评论 -
leetcode 会议室分配
【代码】leetcode 会议室分配。原创 2024-06-10 21:15:11 · 302 阅读 · 0 评论 -
31. 下一个排列 python
规律:一个nums 列表分为前半部分和后半部分,后半部分是递增数组, 前半部分为非递减,关键是找数组里的两个下标, middle和 right。middle代表从nums从尾部往前非递减序列的头, right代表递增序列里比nums[middle- 1]大的最小的元素,把a[0]到a[middle- 1]称作前半部分数,把a[middle]到a[n]称作后半部分数,然后交换a[middle- 1]和a[right],就保障了 新的前半部分数是比之前的前半部分数大的数里面的最小的,因为只...原创 2021-08-10 20:54:02 · 173 阅读 · 0 评论 -
78.子集
77.组合class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.res = [] self.num = nums for k in range(len(self.num)+1): self.ba...原创 2021-04-17 09:48:49 · 59 阅读 · 0 评论 -
77.组合
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ self.res = [] self.n = n self.backtrace(1, [], k) return self.res ...原创 2021-04-17 09:30:05 · 102 阅读 · 0 评论 -
74.搜索二维矩阵
class Solution(object): def searchMatrix(self, matrix, target): """ :type matrix: List[List[int]] :type target: int :rtype: bool """ m = len(matrix) n = len(matrix[0]) left = 0 ...原创 2021-04-14 14:49:08 · 67 阅读 · 0 评论 -
64.最小路径和
思路:用动态规划:dp[i][j] 代表了从第一个点到当前节点最短路径和,在第一行,只能从第一个点向右走,所以dp[0][j] = dp[0][j-1] + grid[0][j]在第一列,只能从第一个点向下走,所以dp[i][0] = dp[i-1][0] + grid[i][0]在(1,1)->(m-1, n-1)的过程中dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]class Solution(obje...原创 2021-04-14 13:31:04 · 65 阅读 · 0 评论 -
59. 螺旋矩阵 II
思路:类似于54,螺旋矩阵class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ if n == 1: return [[1]] self.matrix = [[False for _ in range(n)] for _ in ...原创 2021-04-14 12:27:28 · 61 阅读 · 0 评论 -
54.螺旋矩阵
思路:设置向右,向下,向左,向上,四个方向,每次到边界的时候,设置下一次的可以走的范围(row, col)row -= 1 or col -=1举例(第一幅图 3*3 ):向右走完之后 :1->2->3 要向下了,row是这一次的参数, 要限制row ,于是 row-=1 因为6->96-》9走完就要向左了,这次是col做这一次的参数,要限制 col,于是col-=1 因为8->7class Solution(object): def spira...原创 2021-04-12 20:15:49 · 59 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: newHead = Lis...原创 2021-04-08 19:06:51 · 106 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
正向遍历,left 当先锋,遍历数组中的所有元素,定义pre, post,pre是记录要剔除元素的位置(同时也是记录新数组的长度),post是新元素的首位置。class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ left = 0 right =...原创 2021-04-08 18:12:51 · 123 阅读 · 0 评论 -
62. 不同路径I 和 II
动态规划:dp[x,y] = dp[x-1,y] + dp[x,y-1]dp(x,y)代表到达当前位置最少路径数。class Solution(object): def uniquePaths(self, m, n): """ :type m: int :type n: int :rtype: int """ grid = [[1 for _ in range(n)] for _ in...原创 2021-04-08 13:54:26 · 116 阅读 · 0 评论 -
57. 插入区间
第一个思路: 首先写个cmp函数,用来比较两个区间的合并和插入举例:ls1 = [1,2]ls2 = [3,4]找规律:设最大值和最小值max_val, min_valmax_val = max(2,4) = 4min_val = min(1,3) =1max_val 和 min_val 在不同区间取值(类似异号)因为 2 < 3: (拥有max_val的区间的start > 拥有min_val 区间的end)所以 两个区间不能合并,ls3 =[ ...原创 2021-04-08 13:23:14 · 92 阅读 · 0 评论 -
50.Pow(x,n)
如果用遍历循环的方法,时间复杂度O(n), 不行。用递归的方法,n 为奇数, x * mypower(x,n-1), n为偶数,mypower(x*x ,n/2) 时间复杂度O(logn)class Solution(object): def myPow(self, x, n): """ :type x: float :type n: int :rtype: float """ if n ...原创 2021-04-07 19:02:45 · 76 阅读 · 0 评论 -
48. 旋转图像
class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: None Do not return anything, modify matrix in-place instead. """ n = len(matrix) used = [] for i in ...原创 2021-04-07 16:24:06 · 54 阅读 · 0 评论 -
45. 跳跃游戏 II
贪心算法设置:可以到达最大位置:max_pos步数:step边界:end正向遍历, 一个人一边朝边界出发,一边记录他在当前位置可以到达的最远的位置,到达边界的时候,边界就直接更新到他所能到达的最远位置,步数加一,因为此题所给的数组一定会达到最后一个位置,所以遍历时候不考虑最后一个位置。如图:现在考虑如何实现?我们可以维护这个可到达的最远位置,作为边界。当我们正向遍历的时候,当到达边界时,就更新这个边界,相应的跳跃次数加 1。这里需要注意一点,我们从正向遍历的时...原创 2021-04-07 15:39:57 · 111 阅读 · 0 评论 -
43.字符串相乘
class Solution(object): def multiply(self, num1, num2): """ :type num1: str :type num2: str :rtype: str """ dict = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9 } ...原创 2021-04-07 14:48:21 · 84 阅读 · 0 评论 -
leetcode 47.全排序II
注意:有两个相同元素的,前一个元素虽然使用过,回溯的时候used状态会被覆盖为falseclass Solution(object): def permuteUnique(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.nums = nums self.nums.sort() ...原创 2021-04-05 23:49:35 · 58 阅读 · 0 评论 -
leetcode 46.全排序
方法一:swapclass Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.nums = nums self.res = [] self.backtrance(0, []) return self.res...原创 2021-04-05 23:19:17 · 115 阅读 · 0 评论