- 博客(37)
- 收藏
- 关注
原创 HOT 100 | 【子串】76.最小覆盖子串、【普通数组】53.最大子数组和、【普通数组】56.合并区间
本文介绍了三个算法问题的解题思路和代码实现。首先,针对“最小覆盖子串”问题,通过滑动窗口和哈希表技术,有效降低了时间复杂度,实现了在字符串s中找到包含字符串t所有字符的最短子串。其次,对于“最大子数组和”问题,采用动态规划方法,通过定义状态转移方程和初始化条件,求解了数组中连续子数组的最大和。最后,关于“合并区间”问题,利用贪心算法,通过排序和判断区间重叠,实现了区间的合并。每个问题都提供了详细的解题步骤和Python代码实现,展示了如何高效解决这些常见的算法问题。
2025-05-09 23:55:58
402
原创 代码随想录 Day 45 | 【第九章 动态规划part 08】121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
121. 买卖股票的最佳时机。
2025-03-19 00:16:54
1002
原创 代码随想录 Day 44 | 【第九章 动态规划part 07】198.打家劫舍、213.打家劫舍II、337.打家劫舍III
198.打家劫舍。
2025-03-16 18:15:13
853
原创 代码随想录 Day 43 | 【第九章 动态规划part 06】322. 零钱兑换、279.完全平方数、139.单词拆分、
关于多重背包,你该了解这些!代码随想录背包问题总结篇!代码随想录。
2025-03-15 18:19:24
1014
原创 代码随想录 Day 42 | 【第九章 动态规划 part 05】完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
完全背包。
2025-03-13 23:52:16
468
原创 代码随想录 Day 41 | 【第九章 动态规划 part 04】1049. 最后一块石头的重量 II、494. 目标和、474.一和零
(1)定义dp数组及初始化:初始化一个二维动态规划数组 dp,大小为 (m+1) x (n+1),dp[i][j] 表示在至多有 i 个 '0' 和 j 个 '1' 的条件下,可以选择的最大字符串数量;(2)递推公式:本题中石头的重量就是石头的价值,递推公式为dp[j] = max(dp[j], dp[j-stones[i]]+stones[i])(4)dp数组递推公式:dp[i][j] = max(dp[i][j], dp[i-zero][j-one] + 1)
2025-03-05 22:40:12
1128
原创 代码随想录 Day 39 | 【第九章 动态规划 part 03】01背包问题 二维、01背包问题 一维、416. 分割等和子集
例如初始化最左边,它的含义是背包容量为0,放物品0、1、2、...、j的最大价值是多少,显然最大价值为0,初始化为0,因为背包容量为0。初始化最上方,它的含义是背包容量为0、1、2、...、i分别放物品0的最大价值是多少,物品0的容量为多少,前面的值为0(因为放不下),而后面的值全部初始化为物品0的价值。(2)递推公式:dp[ i ][ j ]取决于是否放当前的物品 i ,如果不放物品 i ,那么当前状态的最大价值为dp[i-1][j];如果放物品[i],那么减去i的重量,加上i的价值。
2025-03-02 12:52:55
1171
原创 代码随想录 Day 38 | 【第九章 动态规划part 02】62.不同路径、63. 不同路径 II、343.整数拆分、96.不同的二叉搜索树
本题大家掌握动态规划的方法就可以。数论方法 有点非主流,很难想到。
2025-03-01 20:00:33
681
原创 代码随想录 Day 37 | 【第九章 动态规划part 01】理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
理论基础无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了?其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!如果做过动态规划题目的录友,看我的理论基础 就会感同身受了。
2025-02-28 00:30:29
1011
原创 代码随想录 Day 36 | 【第八章 贪心算法 part 05】56. 合并区间、738.单调递增的数字、968.监控二叉树 (可跳过)、贪心算法总结
(1)首先对区间按照左边界进行排序,方便对重叠区间进行处理。(2)对重叠的判断:当前区间的左边界小于等于上一个区间的右边界,说明两个区间存在重叠;从而对重叠区间进行合并操作。如果两个区间不重叠,就重新定义一个result数组将区间放入即可。(1)定义一个二维数组用于记录我们最后的结果。(2)如果输入的区间是空,那么直接返回我们的空result结果。(3)对输入的区间按照左边界进行排序。将第0个区间先放进结果集,因为至少有一个区间是一定存在的。如果后面的区间有重叠的话,那么直接让区间进行合并,直接在resul
2025-02-23 15:37:39
540
原创 代码随想录 Day 35 | 【第八章 贪心算法 part 04】452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
452. 用最少数量的箭引爆气球。
2025-02-23 13:35:01
414
原创 代码随想录 Day 34 | 【第八章 贪心算法 part 03】134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
本题有点难度,不太好想,推荐大家熟悉一下方法二。
2025-02-20 01:38:21
1098
原创 代码随想录 Day 33 | 【第八章 贪心算法 part 02】122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和
本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!
2025-02-16 23:22:05
1118
原创 代码随想录 Day 32 |【第八章 贪心算法 part 01】理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
2025-02-15 19:56:17
1093
原创 代码随想录 Day 31 | 【第七章 回溯算法 part 04】491.递增子序列、46.全排列、47.全排列 II、总结
排列:元素相同但顺序不同,是不同的排列。组合:元素相同但顺序不同,也是同一组合。
2025-02-15 00:14:33
548
原创 代码随想录 Day 30 | 【第七章 回溯算法part 03】93.复原IP地址、78.子集、90.子集II
本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了。
2025-02-13 23:47:48
1023
原创 代码随想录 Day 29 | 【第七章 回溯算法 part02】39. 组合总和、40.组合总和II、131.分割回文串
本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制(1)定义函数的参数和返回值:定义二维数组result存放结果集,定义一维数组path收集单一结果,返回值为空。参数有数组、target、sum(统计组合的和)、startindex(用于找到下一个组合的开始位置,也就是找到下一个for循环的开始位置)(2)确定终止条件:如果sum大于target,那么直接return,终止;如果sum等于target,那么说明满足题目条件,将这个path存入结果集,并返回。
2025-02-12 00:38:41
898
原创 代码随想录 Day 28 | 【第七章 回溯算法part 01】理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合
有回溯就有递归,回溯函数就是递归函数。
2025-02-09 16:59:37
1010
原创 代码随想录 Day 27 | 【第六章 二叉树part 08】669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结
好了,二叉树大家就这样刷完了,做一个总结吧代码随想录涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,二叉树:找所有路径 (opens new window)也用了前序,这是为了方便让父节点指向子节点。
2025-02-09 01:34:13
1125
原创 代码随想录 Day 20 | 【第六章 二叉树part07】235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。
2025-02-08 01:05:27
1120
原创 代码随想录 Day 18 | 【第六章 二叉树 part06】530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
需要领悟一下二叉树遍历上双指针操作,优先掌握递归。
2025-02-07 01:32:33
1278
原创 代码随想录 Day 17 | 【第六章 二叉树 part05】654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历。
2025-02-04 16:46:43
1241
原创 代码随想录 Day 16 | 【第六章 二叉树】找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树
本题递归偏难,反而迭代简单属于模板题, 两种方法掌握一下。
2025-02-03 14:57:38
2321
原创 代码随想录 Day 15 | 【第六章 二叉树】110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
110.平衡二叉树。
2025-02-01 17:49:58
966
原创 代码随想录 Day 14 | 【第六章 二叉树】 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。
2025-02-01 00:21:24
1996
原创 代码随想录 Day 13 | 【第六章 二叉树】理论基础、递归遍历、迭代遍历、层序遍历
二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。二叉树是一种基础数据结构,在算法面试中都是常客,也是众多数据结构的基石。本篇我们介绍了二叉树的种类、存储方式、遍历方式以及定义,比较全面的介绍了二叉树各个方面的重点,帮助大家扫一遍基础。说到二叉树,就不得不说递归,很多同学对递归都是又熟悉又陌生,递归的代码一般很简短,但每次都是一看就会,一写就废。二、递归遍历 (必须掌握)二叉树的三种递归遍历掌握其规律后,其实很简单.代码随想录。
2025-01-28 00:25:56
1143
原创 代码随想录 Day 11 | 【第五章 栈与队列】150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素、总结
在栈与队列系列中,强调栈与队列的基础,也是很多同学容易忽视的点。使用抽象程度越高的语言,越容易忽视其底层实现,而C++相对来说是比较接近底层的语言。用栈实现队列,用队列实现栈来掌握的栈与队列的基本操作。接着,通过括号匹配问题、字符串去重问题、逆波兰表达式问题来系统讲解了栈在系统中的应用,以及使用技巧。通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。
2025-01-25 14:42:40
963
原创 代码随想录 Day 10 | 【第五章 栈与队列】 232.用栈实现队列 、225. 用队列实现栈 、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
(1)实现MyQueue类:必须定义两个栈,分别是进栈和出栈;(2)调用进栈append()函数,将元素添加进入进栈内;(3)定义判断空栈的函数,因为要求队列为空返回true,所以在调用进/出栈之前加上not;(4)移除队列开头元素并将其返回:首先对self调用empty进行判断,如果为空,直接返回None;然后判断出栈是否为空,出栈如果不为空,则直接弹出元素,如果出栈为空,则需要将入栈的全部元素添加进入出栈中,入栈元素弹出,然后出栈添加元素,最后返回出栈的第一个元素;
2025-01-24 15:20:07
1027
原创 代码随想录 Day 9 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串、字符串总结 、双指针回顾
代码随想录字符串就是由多个字符组成的有限序列,也可以理解为字符数组。此时我们已经做过10道双指针的题目了,总结一下双指针的心得代码随想录。
2025-01-19 02:54:15
2178
原创 代码随想录 Day 8 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字
建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。
2025-01-17 00:29:17
947
原创 代码随想录 Day 7 | 454.四数相加II、383. 赎金、15. 三数之和 、18. 四数之和
(3)本题目不需要去重,所以最后在第二组遍历时,需要。
2025-01-16 01:45:48
972
原创 代码随想录 Day 6 | 【哈希表理论基础】、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
然后定义一个空数组,用于存放最终结果。
2025-01-14 16:42:21
897
原创 代码随想录 Day 4 | 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II 、【链表】总结
一般涉及到 增删改操作,用虚拟头结点都会方便很多, 如果只能查的话,用不用虚拟头结点都差不多。当然也可以为了方便记忆,统一都用虚拟头结点。代码随想录。
2025-01-12 20:47:04
986
原创 代码随想录Day 3 | 【链表理论基础】203.移除链表元素、707.设计链表、206.反转链表
注意:平时在刷 leetcode 时,链表定义是默认给出的,但在面试中一旦要求手写链表,是需要自己进行链表定义的。
2025-01-12 01:49:33
767
原创 代码随想录算法训练营Day 2 | 209.长度最小的子数组、59.螺旋矩阵II、
方便用于后续比较最小值:2)没有想清楚应该遍历移动快指针还是慢指针:如果遍历移动慢指针,则和暴力解法没有区别,时间空间复杂度很高;因此只能遍历移动快指针,利用快指针先得到一个窗口,如何再移动慢指针逐渐缩小窗口。3)关于先移动慢指针还是先缩小子数组的总和:如果先移动慢指针,则sum = sum - nums[slow]这一步的nums[slow]就会被减错;因此必须先减去目前慢指针对应的元素,再移动慢指针。
2025-01-09 00:59:30
593
1
原创 代码随想录算法训练营Day 1 | 704. 二分查找、27. 移除元素
数组是存储在连续的内存空间相同类型数据的集合。通过下标索引获取下标对应的数据。2.注意:1)下标从0开始;2)数组内存空间的地址连续因为数组在内存空间地址连续,所以在增删元素的时候,需要移动其他元素的地址。3.数组元素不可以删除,只能覆盖。
2025-01-07 21:59:15
831
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人