自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 补充【前缀和】+【数组篇总结】 | 58.区间和、44.开发商购买土地

代码随想录。

2025-01-09 23:29:25 298

原创 代码随想录算法训练营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关注的人

提示
确定要删除当前文章?
取消 删除