自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 architecture of system design

figure

2023-11-26 20:41:53 52

原创 代码随想录算法训练营第四十三天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

思路:假设 left 为待添加 ‘+’ 号的元素集合,right 为待添加 ‘-’ 号的元素集合,则left - right = target;又因为left + right = sum,则由两式可得 left = (target + sum) / 2;思路:本题首先明确是 01 背包不是完全背包,因为物品的数量都是一个,只不过这个背包有两个维度,一个是 m,一个是 n,而不同长度的字符串就是不同大小的待装物品。所有组合类问题都有类似公式—— dp[j] += dp[j - nums[i]]

2023-09-19 17:35:33 85

原创 代码随想录算法训练营第四十二天 | 01 背包问题(二维)、01 背包问题(一维)、416. 分割等和子集

有 n 件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i],得到的价值是 value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2023-09-06 16:06:34 86

原创 代码随想录算法训练营第四十一天 | 343. 整数拆分、96.不同的二叉搜索树

【代码】代码随想录算法训练营第四十一天 | 343. 整数拆分、96.不同的二叉搜索树。

2023-09-05 11:48:50 68

原创 代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II

思路:本题与上一题相比,主要变动在于障碍改变了递推公式的条件,以及 dp 数组的初始化。

2023-09-02 21:46:29 33

原创 代码随想录算法训练营第三十八天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

这样才是一个完整的思考过程。思路:本题首先寻找规律——爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法,那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由第二层楼梯和到第一层楼梯状态推导出来,那么就可以想到动态规划了。思路:本题首先寻找规律——爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法,那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由第二层楼梯和到第一层楼梯状态推导出来,那么就可以想到动态规划了。

2023-09-01 22:13:01 64

原创 代码随想录算法训练营第三十七天 | 738.单调递增的数字、968.监控二叉树、贪心算法总结

代码随想录—贪心算法总结篇。

2023-08-31 21:16:29 42

原创 代码随想录算法训练营第三十六天 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

思路:本题关键思路在于——在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。注:这道题目 leetcode 标记为贪心算法,但其实找不出局部最优推出全局最优的过程,只是用最远出现距离模拟了圈字符的行为。但本题思路巧妙,值得一做。思路:本题与前一日射气球问题思路相同,重点在于重叠区间的判断。思路:本题的本质仍是区间的重叠问题,对区间的判断与之前别无二致,主要是如何代码实现。

2023-08-30 22:10:41 25

原创 代码随想录算法训练营第三十五天 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

但进一步思考,如果把气球排序之后,从前到后遍历气球,被射过的气球跳过就行了,没有必要让气球数组 remove 气球,只要记录一下箭的数量就可以了。那么按照身高 h 来排序呢,身高一定是从大到小排(身高相同的话则 k 小的站前面),此时就可以确定身高这个维度了——前面的节点一定都比本节点高。思路:本题有两个维度(h 和 k)。对原数组按起始位置排序,从前向后遍历气球数组,靠左尽可能让气球重复。如果按照 k 来从小到大排序,排完之后会发现 k 的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。

2023-08-29 19:27:20 16

原创 代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

若使用贪心算法,如果总油量减去总消耗 >= 0,那么一定可以跑完一圈,说明各个站点的加油站剩油量 rest[i] 相加一定是 >= 0。如果 curSum < 0 说明区间和1 + 区间和2 小于 0, 那么假设从上图中的位置开始计数 curSum不会小于0的话,就是 区间和2>0。区间和1 + 区间和2 < 0 同时区间和2 > 0,只能说明区间和1 < 0, 那么就会从假设的箭头初就开始重新选择起始位置了。思路:本题难点在于不能一起考虑,而应该先处理一部分,再处理另一部分,即两次贪心策略。

2023-08-28 17:24:33 14

原创 代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

由图可知,贪心的策略就是只收集每天的正利润,因此局部最优就是收集每天的正利润,全局最优就是求得的最大利润。局部最优可以推出全局最优,且找不出反例,因此尝试贪心算法。思路:本题不一定要明确一次跳几步,关键在于跳跃的范围。因此将问题转化为问题就转化为。思路:本题相对上一题难度增加,但关键思想还在于覆盖范围。

2023-08-27 21:32:56 18

原创 代码随想录算法训练营第三十一天 | 贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

上图表示:if 里的 index 指向胃口 10, for 里的 i 指向饼干 9,因为饼干 9 满足不了胃口 10,所以 i 持续向前移动,而 index 走不到 s[index] >= g[i] 的逻辑,所以 index 不会移动,那么当 i 持续向前移动,最终导致所有的饼干都匹配不上。注意:必须先遍历胃口,再遍历饼干,因为外面的 for 循环的 i 是固定移动的,而 if 里面的下标 index 是符合条件才移动的。思路:本题细节较多,详见注释。则是整个序列有最多的局部峰值,从而达到最长摆动序列。

2023-08-27 10:00:02 32

原创 代码随想录算法训练营第二十七天 | 39. 组合总和、40.组合总和II、131.分割回文串

思路:本题涉及去重,即使用过的元素不能重复选取。本题的“使用过”概念主要针对树层去重,而非树枝去重(原数组须提前排序)。

2023-08-22 17:20:12 12

原创 代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合

【代码】代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合。

2023-08-20 21:15:53 13

原创 代码随想录算法训练营第二十四天 | 回溯算法理论基础、77. 组合

每次从集合中选取元素,可选择的范围随着选择的进行而收缩,调整可选择的范围。图中可以发现 n 相当于树的宽度,k 相当于树的深度。图中每次搜索到了叶子节点,就找到了一个结果。相当于只需要把达到叶子节点的结果收集起来,就可以求得 n 个数中 k 个数的组合集合。回溯法解决的问题都可以抽象为树形结构。因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度则构成的树的深度。其中递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。

2023-08-20 19:35:10 22

原创 代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树

代码随想录——二叉树完结篇。

2023-08-18 20:44:43 124

原创 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

5、key 值所在节点,左右孩子都不为空(最复杂,因为要大幅调整树的结构),可将当前节点的左或右孩子作为替代。思路:本题不需要考虑遍历顺序,利用 BST 的特性即可求解,递归中不用写与中节点相关的代码。思路:本题关键在于理解,对于 BST,插入节点操作仅考虑叶子节点处即可。3、key 值所在节点,左孩子不为空,右孩子为空;4、key 值所在节点,右孩子不为空,左孩子为空;2、key 值位于叶子节点;1、未找到 key 值;

2023-08-16 15:51:32 33 1

原创 代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

对于以上两种情况,在代码的实现过程中都是一样的,也可以说实现情况一的逻辑包含了情况二,因为遇到 q 或者 p 就返回,这样也包含了 q 或者 p 本身就是公共祖先的情况。思路:首先需要考虑到自底向上查找,即二叉树的回溯。各种遍历方式中,后序遍历是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑。思路:暴力思想为将二叉搜索树转化为数组,进而寻找最小绝对差。思路:同样采用中序遍历的方式,主要技巧在于更新结果以及 maxCount 处,目的在于一次遍历即可完成操作。

2023-08-15 21:10:51 46 1

原创 代码随想录算法训练营第二十天 | 654.最大二叉树、617.合并二叉树 、700.二叉搜索树中的搜索 、98.验证二叉搜索树

思路:初遇二叉搜索树。值得注意的是二叉搜索树的构造规则(左孩子小于父节点,右孩子大于父节点)使得遍历时不再需要考虑选择前中后序。思路:构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。思路:遇到搜索树,第一反应中序遍历,因为可以利用相关特性。思路:对两颗二叉树进行操作,同样采用前序遍历进行构造。

2023-08-14 22:07:15 28 1

原创 代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和 II、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

是指找到深度最大的第一个叶子节点(因为前、中、后序遍历都是先遍历左节点然后遍历右节点。保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。思路:可以使用深度优先遍历的方式(本题前、中、后序都可以,因为中节点也没有处理逻辑)来遍历二叉树。思路:与上一题类似。思路:与上一题类似。

2023-08-13 22:00:39 26 1

原创 代码随想录算法训练营第十七天 | 110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和

思路:这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。思路:对于二叉树,求深度可以从上到下去查,所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中)。思路:首先明确什么是左叶子——节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。

2023-08-11 22:04:03 21 1

原创 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

时,如果左子树为空,右子树不为空,说明最小深度是 (1 + 右子树的深度)。反之,右子树为空,左子树不为空,最小深度是 (1 + 左子树的深度)。思路:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。思路:本题可以使用前序遍历(中、左、右),也可以使用后序遍历(左、右、中),使用前序求的就是深度,使用后序求的是高度。思路:本题依然是前序遍历和后序遍历都可以,前序求的是深度,后序求的是高度。思路:与上一题基本类似,递归 + 后续遍历。

2023-08-10 21:35:58 16 1

原创 代码随想录算法训练营第十五天 | 层序遍历、226.翻转二叉树、101.对称二叉树

层序遍历一个二叉树就是从左到右一层一层的去遍历每个节点。这种遍历的方式需要借用一个辅助数据结构即来实现,队列先进先出的特性符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。层序遍历方式就是图论中的,只不过这里应用在二叉树上。

2023-08-09 22:21:28 29 1

原创 代码随想录算法训练营第十四天 | 二叉树理论基础、递归遍历、迭代遍历、统一迭代

二叉树的定义和链表类似,相对于链表 ,二叉树的节点里多了一个指针, 两个指针分别指向左孩子和右孩子。(在现场面试时面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要会自己写)int val;} }

2023-08-08 22:16:51 44 1

原创 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素、栈和队列总结

思路:暴力方法,遍历一遍的过程中每次从窗口中再找到最大的数值,这样很明显是O(n × k)的算法。优化的想法为——一个队列先放进去窗口里的元素,然后随着窗口的移动,队列也一进一出;每次移动之后,队列返回其中的最大值。再分析一下,队列里的元素一定是要排序的,而且要最大值放在出队口,这样每次移动后查看队列出口就知道最大值是多少了。但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。那么已经排序之后的队列怎么能把窗口要移除的元素(这个元素不一定是最大值)弹出呢?对于本题而言,

2023-08-07 16:36:25 30 1

原创 代码随想录算法训练营第十一天 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

注:由于栈结构的特殊性,非常适合做的题目。

2023-08-05 21:50:18 18 1

原创 代码随想录算法训练营第十天 | 栈与队列理论基础、232.用栈实现队列、225. 用队列实现栈

栈是先进后出,队列是先进先出,。

2023-08-04 16:07:22 70 1

原创 代码随想录算法训练营第九天 | 28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾

代码随想录 字符串—总结篇代码随想录 双指针—总结篇。

2023-08-03 17:28:11 27

原创 代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串

反转区间为前n的子串。反转区间为n到末尾的子串。反转整个字符串。start ++;end --;} } }

2023-08-02 20:23:16 16 1

原创 代码随想录算法训练营第七天 | 454.四数相加II、383. 赎金信、15. 三数之和 、18. 四数之和

思路:延续三数之和的解题思路,但需要更复杂的剪枝和去重操作。两层for循环 nums[k] + nums[i] 为确定值,依然是循环内有 left 和 right 下标作为双指针,找出 nums[k] + nums[i] + nums[left] + nums[right] == target 的情况,三数之和的时间复杂度是O(n。思路:本题是四个独立的数组,只要找到 A[i] + B[j] + C[k] + D[l] = 0 即可,不用考虑有重复的四个元素,也就是不用去重,因此难度较低。

2023-08-01 21:06:53 54 1

原创 代码随想录算法训练营第六天 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数 、1. 两数之和

定义:哈希表是根据关键码的值而直接进行访问的数据结构。哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:一般哈希表都是用来快速判断一个元素是否出现集合里,是牺牲空间换取时间的方法。

2023-07-31 21:44:44 88 1

原创 代码随想录算法训练营第四天 | 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、 面试题(02.07)链表相交、142.环形链表II

(2)因为 fast 指针是一步走两个节点,slow 指针一步走一个节点, 所以 fast 指针走过的节点数 = slow 指针走过的节点数 * 2,即 (x + y) * 2 = x + y + n (y + z),两边消掉一个(x + y),即 x + y = n (y + z)。使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast 指针每次移动两个节点,slow 指针每次移动一个节点,如果 fast 和 slow 指针在途中相遇 ,说明这个链表有环。

2023-07-29 20:55:05 19

原创 代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表

思路:若直接在原链表上进行删除,则头节点和其他节点的操作须分开,因为其他节点都是通过前一个结点进行删除,而头节点没有前一个结点(头节点的删除只要将头节点后移一位即可)。单链表中的指针域只能指向节点的下一个节点,而双链表的每一个节点有两个指针域,一个指向上一个节点,一个指向下一个节点,因此双链表既可以向前查询也可以向后查询。链表通过指针域的指针链接在内存中各个节点,所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。,第0个节点即为头节点。

2023-07-28 22:37:28 130 1

原创 代码随想录算法训练营第二天 | 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

注:题目所给条件为。

2023-07-27 21:40:28 203 1

原创 代码随想录算法训练营第一天 | 704. 二分查找,27. 移除元素

算法训练营day01

2023-07-26 16:55:21 404

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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