leetcode
In_life 在生活
珍惜当下。
展开
-
leetcode-动态规划-01背包
(2)状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);dp[1][1] = max(dp[0][1], dp[0][1- weight[i]] + value[i]) 一定在其左方且上方,重量是nums[i],价值也是nums[i],背包体积是sum/2。原创 2024-07-10 17:12:50 · 454 阅读 · 0 评论 -
leecode-动态规划-基础题目
一定是选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1](2)dp[i][j]为从dp[0][0]到dp[i][j]的路径数。故:dp[i][j]=dp[i-1][j]+dp[i][j-1]遇到障碍,则停止赋值为1;原创 2024-07-09 17:05:01 · 262 阅读 · 0 评论 -
leetcode-22-贪心-01
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。为了满足更多的小孩,就不要造成饼干尺寸的浪费!是先遍历的胃口,再遍历的饼干。原创 2024-07-03 19:55:54 · 232 阅读 · 0 评论 -
leetcode-21-回溯-全排列及其去重
回溯总结:一般来说:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果。相当于在每个分支上标记使用了那些元素,每个分支,元素只可以使用一次。的序列 nums ,按任意顺序 返回所有不重复的全排列。,这样我们才方便通过相邻的节点来判断是否重复使用了。数字的序列,返回其所有可能的全排列。其中,不需要使用startIndex。1、去重一定要对元素进行。2、树枝去重(更好理解)3、树层去重(效率更高)二、[47]全排列2。原创 2024-07-02 12:00:51 · 250 阅读 · 0 评论 -
leetcode-20-回溯-切割、子集
示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]子串:[startIndex,i] 即为分割线前面的部分、两个分割线之间的部分(长度至少为1)示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]不同的是先判断取的每一部分是否是回文串,是,则继续分割,下一层递归;给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。原创 2024-06-29 21:28:22 · 390 阅读 · 0 评论 -
leetcode-19-回溯-组合问题(剪枝、去重)
示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4]]至多从该起始位置开始遍历(否则元素个数不够):n - (k - path.size()) + 1。类似题目[216]、[17](有点难度)、[39]、[40](需要对开始索引做处理)[x, n]的数组长度起码应该是k-path.size()才有继续搜索的可能。解方程得 x = n+1 - (k-path.size()),那么 n-x+1 = k-path.size()原创 2024-06-27 21:20:31 · 619 阅读 · 0 评论 -
leetcode-18- [669]修剪二叉搜索树[108]将有序数组转换为二叉搜索树[538]把二叉搜索树转换为累加树
一般先考虑抽出一个子树,即左根右三个节点,之后根据条件,看往左子树还是右子树。二叉搜索树多考虑特性,不用考虑遍历顺序。一、[108]将有序数组转换为二叉搜索树。二、[538]把二叉搜索树转换为累加树。重点:一般二叉树多考虑遍历顺序,三、[669]修剪二叉搜索树。方向前进,或者结束递归返回。原创 2024-06-26 15:50:26 · 275 阅读 · 0 评论 -
leetcode-17-[235]二叉搜索树的最近公共祖先[701]二叉搜索树中的插入操作[450]删除二叉搜索树中的节点
一、[235]二叉搜索树的最近公共祖先。二、[701]二叉搜索树中的插入操作。三、[450]删除二叉搜索树中的节点。1、叶子节点的删除思路如上题。原创 2024-06-25 13:28:06 · 213 阅读 · 0 评论 -
leetcode-16-[530]二叉搜索树的最小绝对差[501]二叉搜索树中的众数[236]二叉树的最近公共祖先
一、[530]二叉搜索树的最小绝对差。三、[236]二叉树的最近公共祖先。二、[501]二叉搜索树中的众数。注意:节点相等,而不是值相等。原创 2024-06-24 16:23:51 · 139 阅读 · 0 评论 -
leetcode-15-[654]最大二叉树[617]合并二叉树[700]二叉搜索树中的搜索[98]验证二叉搜索树
注意:可以与后序中序建树一起写,思想类似。三、[700]二叉搜索树中的搜索。注意:也可以新建树来存储节点。利用二叉搜索树的特性。四、[98]验证二叉搜索树。一、[654]最大二叉树。二、[617]合并二叉树。重点:类似于数组的双指针。原创 2024-06-22 20:29:03 · 259 阅读 · 0 评论 -
leetcode-14-[513]找树左下角的值[112]路径总和[113] 路径总和ii [106]从中序与后序遍历序列构造二叉树[105]从前序与中序遍历序列构造二叉树
因此:需暂存tmp(List),再赋值给res,否则只存入了根节点,其他元素都remove了。三、[106]从中序与后序遍历序列构造二叉树[105]从前序与中序遍历序列构造二叉树。如果你知道中序的左部分的size,就可以靠size去切割后序。中序点左点size和后续的左的size一定是一样的。二、[112]路径总和[113] 路径总和ii。重点:List为引用传递,指向同一个内存地址。一、[513]找树左下角的值。因为中序和后续都是先左后右。原创 2024-06-21 12:27:09 · 370 阅读 · 0 评论 -
leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数
如:根节点的左子树,只有一个节点,符合条件,此时直接返回。重点:注意不能直接返回 root.left.val,即。应该暂存tmp=root.left.val,注意:注释的1、2两处得有返回值-1。而右子树还没有进行递归,解答错误。四、[222]完全二叉树的节点个数。在左右子树均进入递归后,再返回。另:后序遍历 逻辑更加容易理解。二、[257]二叉树的所有路径。一、[110]平衡二叉树。三、[404]左叶子之和。原创 2024-06-20 17:47:29 · 207 阅读 · 0 评论 -
leetcode-12-[226]翻转二叉树[101]对称二叉树[104]二叉树的最大深度[111]二叉树的最小深度
2、tmp为局部变量,不存值,直观来说,即层层递归之后的返回tmp,仍为一开始传入的tmp,中间过程忽略不计。1、题目中:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。高度:任意节点到叶子节点(左右孩子都为空)的节点数。说明: 叶子节点是指没有子节点的节点。深度:任意节点到根节点的节点数。三、[104]二叉树的最大深度。四、[111]二叉树的最小深度。重点:交换节点应该传入根节点。一、[226]翻转二叉树。二、[101]对称二叉树。原创 2024-06-19 15:17:56 · 292 阅读 · 0 评论 -
leetcode-11-二叉树前中后序遍历以及层次遍历
10题解法类似,均可采用层次遍历的思想。前序遍历 (先根遍历) 中左右。[102]二叉树的层次遍历。原创 2024-06-18 17:08:08 · 193 阅读 · 0 评论 -
leetcode-10-[150]逆波兰表达式求值 [239]滑动窗口最大值[347]前k个高频元素
对于堆(使用PriorityQueue实现):从队头到队尾按从小到大排就是最小堆(小顶堆),2、需要保证队列元素在[i+1-k,i]区间,即当队头元素不在这个区间内,及时移出。从队头到队尾按从大到小排就是最大堆(大顶堆)--->队头元素相当于堆的根节点。3、加入的元素值必须小于队尾元素的值(始终保证队头元素最大),否则移出。“-”、“/”,第二个弹出的元素 “-” 第一个弹出的元素。第一个参数:1 第二个参数:3 负数 1、3。第一个参数:4 第二个参数:3 正数 3、4。原创 2024-06-17 13:55:54 · 397 阅读 · 0 评论 -
leetcode-09-[232]用栈实现队列[225]用队列实现栈[20]有效的括号[1047]删除字符串中的所有相邻重复项
基于Linkedlist是链表等,除了删除操作,ArrayDeque的其他效率都比Linkedlist好。队列建议用ArrayDeque和Linkedlist来实现。建议用 ArrayDeque和Linkedlist来实现。四、[1047]删除字符串中的所有相邻重复项。重点:queue2 为辅助队列,只做中转用。栈不建议用stack来实现。一、[232]用栈实现队列。二、[225]用队列实现栈。重点:在构造器内初始化。三、[20]有效的括号。原创 2024-06-15 14:04:03 · 284 阅读 · 0 评论 -
leetcode-08-[151]翻转字符串里的单词[卡码网55]右旋转字符串
一、[151]翻转字符串里的单词。二、[卡码网55]右旋转字符串。原创 2024-06-14 11:40:56 · 326 阅读 · 0 评论 -
leetcode-07-[344]反转字符串[541]反转字符串II[卡码网54]替换数字
将数组转换成String类型输出的。1、字符数组转String 一般 new String(ch);或者用StringBuffer 、StringBuilder。二、[541]反转字符串II。三、[卡码网54]替换数字。重点:String 不可变。一、[344]反转字符串。原创 2024-06-13 13:11:36 · 362 阅读 · 0 评论 -
leetcode-06-[454]四数相加II[383]赎金信 [15] 三数之和 [18] 四数之和
nums[k] + nums[i] + nums[left] + nums[right] > target int会溢出。应该注意b 、a 可以相同,故 j > i+1(每次开始时 j = i+1)只需要排序后的数组,在a>0时,再进行比较a>target即可,满足则剪枝。但-5+(-4)+1+2=--6 存在四元组。如[-5,-4,0,1,2] -6。三数之和、四数之和 适合用双指针。一、[454]四数相加II。四、[18] 四数之和。三、[15] 三数之和。1、剪枝时,需要考虑。原创 2024-06-12 14:05:20 · 605 阅读 · 0 评论 -
leetcode-05-[242]有效的字母异位词[349]两个数组的交集[202]快乐数[1]两数之和
List 数组 固定大小 如26个字母,10个数字 空间换时间。Map hashmap 形式。无限循环:即出现不止一次,考虑用哈希表。Set hashset 去重。一、[242]有效的字母异位词。二、[349]两个数组的交集。三、[202]快乐数。原创 2024-06-11 15:48:16 · 279 阅读 · 0 评论 -
leetcode-04-[24]两两交换链表中的节点[19]删除链表的倒数第N个节点[160]相交链表[142]环形链表II
快指针先行n步,这样快慢指针之间形成了一段长度为n的窗口,之后快慢指针同步向前相当于保持窗口长度不变。这样当快指针到达了末尾指向NULL,另一端的慢指针距离末尾的长度是n,自然就是指向倒数第n个位置了。由于单链表中的next指针指向的是下一个节点,想要删除倒数第n个节点,自然要将操作指针慢指针指向倒数第n+1个节点,这样才能进行删除操作。如果单链表中要删除的节点是头节点,这个头节点正好是dummyHead的下一个节点,如此即可统一起来删除操作而不必单独考虑。二、[19]删除链表的倒数第N个节点。原创 2024-06-08 14:35:49 · 681 阅读 · 0 评论 -
leetcode-03-[203]移除链表元素[707]设计链表[206]反转链表
重点:定义size!,并在添加时,删除时改变size大小。小重点:设计链表,比较新颖的题型。重点:理解逻辑,找对方法!一、[203]移除链表元素。二、[707]设计链表。三、[206]反转链表。本节重点:虚拟头节点。原创 2024-06-07 14:02:56 · 207 阅读 · 0 评论 -
leetcode-02-[977]有序数组的平方[209]长度最小的子数组[59]螺旋矩阵II
1、滑动窗口,for循环的 j 为终止位置。2、注意最后的处理,滑动窗口大小为0。新引入一个数组,不要原数组操作。二、[209]长度最小的子数组。一、[977]有序数组的平方。2、i 对应 X,j对应 Y。三、[59]螺旋矩阵II。原创 2024-06-06 14:43:23 · 166 阅读 · 0 评论 -
leetcode-01-[704]二分查找[27]移除元素
一、[704]二分查找。没有改变元素的相对顺序。二、[27]移除元素。改变了元素的相对顺序。二、快慢指针(推荐)原创 2024-06-05 13:05:49 · 176 阅读 · 0 评论