自定义博客皮肤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)
  • 收藏
  • 关注

原创 零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零

力扣题目链接(opens new window)题目难度:中等有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。输入:[2,7,4,1,8,1]输出:1。

2024-05-24 21:09:23 958

原创 零基础代码随想录【Day41】|| 01背包问题 二维,01背包问题 一维,416. 分割等和子集

首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0。如图:在看其他情况。状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);可以看出i 是由 i-1 推导出来,那么i为0的时候就一定要初始化。dp[0][j],即:i为0,存放编号0的物品的时候,各个容量的背包所能存放的最大价值。

2024-05-22 19:11:33 540

原创 零基础代码随想录【Day40】|| 343. 整数拆分,96.不同的二叉搜索树

递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));在上面的分析中,其实已经看出其递推关系, dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。返回你可以获得的最大乘积。

2024-05-21 20:32:59 856

原创 零基础代码随想录【Day39】|| 62.不同路径 ,63. 不同路径 II

这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。

2024-05-19 21:47:27 987

原创 零基础代码随想录【Day38】|| 动态规划理论基础 ,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

目录DAY38动态规划理论基础509. 斐波那契数解题思路&代码70. 爬楼梯解题思路&代码746. 使用最小花费爬楼梯解题思路&代码无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? 其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要! 如果做过动态规划题目的录友,看我的理论基础 就会感同身受了。代码随想录视频:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷

2024-05-19 14:00:33 875

原创 零基础代码随想录【Day36】|| 738.单调递增的数字 ,968.监控二叉树, 贪心算法总结

可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。代码随想录。

2024-05-19 10:50:49 382

原创 零基础代码随想录【Day35】|| 435. 无重叠区间 ,763.划分字母区间,56. 合并区间

此时问题就是要求非交叉区间的最大个数。

2024-05-19 00:00:57 930

原创 零基础代码随想录【Day34】|| 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。可以看出首先第一组重叠气球,一定是需要一个箭,气球3,的左边界大于了 第一组重叠气球的最小右边界,所以再需要一支箭来射气球3了。

2024-05-18 14:57:03 543

原创 零基础代码随想录【Day33】|| 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。(我们可以多次选择同一个索引 i。如果从前向后遍历,rating[5]与rating[4]的比较 就不能用上 rating[5]与rating[6]的比较结果了。此时局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。

2024-05-17 16:00:44 657

原创 零基础代码随想录【Day32】|| 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

局部最优推出全局最优,找不出反例,试试贪心!

2024-05-16 08:55:20 987

原创 零基础代码随想录【Day31】|| 贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。针对以上情形,result 初始为 1(默认最右面有一个峰值),此时 curDiff > 0 && preDiff <= 0,那么 result++(计算了左面的峰值),最后得到的 result 就是 2(峰值个数为 2 即摆动序列长度为 2)

2024-05-15 21:06:12 605

原创 零基础代码随想录【Day30】|| 332.重新安排行程,51. N皇后,37. 解数独,回溯算法总结

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

2024-05-13 19:02:45 346

原创 零基础代码随想录【Day29】|| 491.递增子序列 ,46.全排列,47.全排列 II

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。当收集元素的数组path的大小达到和nums数组一样大的时候,说明找到了一个全排列,也表示到达了叶子节点。而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。

2024-05-13 18:19:34 868

原创 零基础代码随想录【Day28】|| 93.复原IP地址 ,78.子集,90.子集II

示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

2024-05-09 11:18:44 650

原创 零基础代码随想录【Day27】|| 39. 组合总和,40.组合总和II, 131.分割回文串

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。注意图中叶子节点的返回条件,因为本题没有组合数量要求,仅仅是总和的限制,所以递归没有层数的限制,只要选取的元素总和超过target,就返回!注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。的区别是:本题没有数量要求,可以无限重复,但是有总和的限制,所以间接的也是有个数的限制。解集不能包含重复的组合。

2024-05-07 17:06:50 1008

原创 零基础代码随想录【Day25】|| 216.组合总和III,17.电话号码的字母组合

组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]],无非就是多了一个限制,本题是要找到和为n的k个数的组合,而整个集合已经是固定的了[1,...,9]。本题就是在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合。示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

2024-05-05 21:56:36 257

原创 零基础代码随想录【Day24】|| 回溯算法理论基础,77. 组合

第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4],以此类推。再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。可以看出这棵树,一开始集合是 1,2,3,4, 从左向右取数,取过的数,不再重复取。既然是树形结构,那么我们在讲解。

2024-05-03 14:56:25 358

原创 零基础代码随想录【Day23】|| 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树 ,538.把二叉搜索树转换为累加树,二叉树总结

你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。节点的右子树仅包含键 大于 节点键的节点。如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

2024-05-02 09:17:44 780 1

原创 零基础代码随想录【Day22】|| 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。只要按照二叉搜索树的规则去遍历,遇到空节点就插入节点就可以了,二叉搜索树插入的新节点必定是叶子节点。例如插入元素10 ,需要找到末尾节点插入便可,一样的道理来插入元素15,插入元素0,插入元素6,

2024-05-01 20:49:45 3

原创 零基础代码随想录【Day21】|| 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4],二叉搜索树可是有序的。

2024-05-01 18:51:55 635 1

原创 零基础代码随想录【Day20】|| 654.最大二叉树,617.合并二叉树 ,700.二叉搜索树中的搜索,98.验证二叉搜索树

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。那么应该定义一个新的节点,并把这个数组的数值赋给新的节点,然后返回这个节点。参数传入的是存放元素的数组,返回该数组构造的二叉树的头结点,返回类型是指向节点的指针。递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。

2024-04-29 20:42:34 856

原创 零基础代码随想录【Day18】|| 513.找树左下角的值,112. 路径总和,106.从中序与后序遍历序列构造二叉树

那么如何找最左边的呢?可以使用前序遍历(当然中序,后序都可以,因为本题没有 中间节点的处理逻辑,只要左优先就行),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。参数:需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型。给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)

2024-04-28 21:36:00 525

原创 零基础代码随想录【Day17】|| 110.平衡二叉树 ,257. 二叉树的所有路径,404.左叶子之和

这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。在这道题目中将第一次涉及到回溯,因为我们要把路径记录下来,需要回溯来回退一个路径再进入另一个路径。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。这是大家第一次接触到回溯的过程, 我在视频里重点讲解了 本题为什么要有回溯,已经。再一次涉及到,什么是高度,什么是深度,可以巩固一下。给定一个二叉树,返回所有从根节点到叶子节点的路径。计算给定二叉树的所有左叶子之和。

2024-04-28 12:34:23 376

原创 零基础代码随想录【Day16】|| 104.二叉树的最大深度 ,111.二叉树的最小深度,222.完全二叉树的节点个数

对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。

2024-04-24 17:44:00 342

原创 零基础代码随想录【Day15】|| 层序遍历 ,226.翻转二叉树,101. 对称二叉树

层序遍历一个二叉树。这种遍历的方式和我们之前讲过的都不太一样。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。这道题目一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。101. 对称二叉树 (优先掌握递归)226.翻转二叉树 (优先掌握递归)先看视频讲解,会更容易一些。

2024-01-29 19:23:39 360

原创 零基础代码随想录【Day14】|| 二叉树理论基础 ,递归遍历,迭代遍历,统一迭代

这里帮助大家确定下来递归算法的三个要素。

2024-01-15 18:59:31 326

原创 零基础代码随想录【Day13】|| 239. 滑动窗口最大值 ,347.前 K 个高频元素,栈的总结

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。返回滑动窗口中的最大值。本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。首先统计元素出现的频率,这一类的问题可以使用map来进行统计。本题是 大数据中取前k值 的经典思路,了解想法之后,不算难。大顶堆(堆头是最大元素),小顶堆(堆头是最小元素)大/小顶堆的应用, 在C++中就是优先级队列。之前讲的都是栈的应用,这次该是队列的应用了。(一刷至少需要理解思路)

2024-01-13 19:53:36 352 1

原创 零基础代码随想录【Day11】|| 20. 有效的括号 ,1047. 删除字符串中的所有相邻重复项 ,150. 逆波兰表达式求值

本题要删除相邻相同元素,相对于20.有效的括号来说其实也是匹配问题,20.有效的括号是匹配左右括号,给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。左右括号不匹配:匹配一次右括号,发现与栈中右括号不符合,直接返回false。右括号多余:匹配一次右括号,栈中右括号弹出一次,还没遍历完,栈已经为空了。左括号多余:匹配一次右括号,栈中右括号弹出一次,最后还是会留下右括号。讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。150. 逆波兰表达式求值。

2024-01-12 14:09:09 816

原创 零基础代码随想录【Day10】|| 理论基础 ,232.用栈实现队列 ,225. 用队列实现栈

大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解。了解一下栈与队列的内部实现机智。,文中是以C++为例讲解的。225. 用队列实现栈。232.用栈实现队列。

2024-01-11 19:30:11 373 1

原创 零基础代码随想录【Day9】|| 28. 实现 strStr() , 459.重复的子字符串, 字符串总结 , 双指针回顾

因为KMP算法很难,大家别奢求 一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会 好懂很多。或者说大家可以放弃一刷可以不看KMP,今天来回顾一下之前的算法题目就可以。因为大家 算法能力还没到,细扣 很难的算法,会把自己绕进去,就算别人给解释,只会激发出更多的问题和疑惑。所以大家先了解大体过程,知道这么回事, 等自己有 算法基础和思维了,在看多看几遍视频,慢慢就理解了。

2024-01-08 09:33:14 874

原创 零基础代码随想录【Day8】|| 344.反转字符串 , 541. 反转字符串II, 卡码网:54.替换数字 , 151.翻转字符串里的单词,卡码网:55.右旋转字符串

建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。建议:这道题目基本把刚刚做过的字符串操作都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。然后从后向前替换数字字符,也就是双指针法,过程如下:i指向新长度的末尾,j指向旧长度的末尾。建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。建议:对于线性数据结构,填充或者删除,后序处理会高效的多。卡码网:55.右旋转字符串。

2024-01-07 14:02:14 808 1

原创 零基础代码随想录【Day7】|| 454.四数相加II , 383. 赎金信 , 15. 三数之和 , 18. 四数之和

代码随想录。

2024-01-05 18:50:57 870 1

原创 零基础代码随想录【Day6】|| 242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快乐数 , 1. 两数之和

建议:本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0

2024-01-04 17:08:49 788 1

原创 零基础代码随想录【Day4】|| 24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 , 面试题 02.07. 链表相交 , 142.环形链表II

可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。双指针的操作,要注意,删除第N个节点,那么我们当前遍历的指针一定要指向 第N个节点的前一个节点,建议先看视频。算是链表比较有难度的题目,需要多花点时间理解 确定环和找环入口,建议先看视频。如果链表无环,则返回。

2024-01-01 20:50:38 337

原创 零基础代码随想录【Day3】|| 203.移除链表元素 , 707.设计链表 , 206.反转链表

建议先看我的视频讲解,视频讲解中对 反转链表需要注意的点讲的很清晰了,看完之后大家的疑惑基本都解决了。建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点。建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。基础,以及链表和数组的区别。203.移除链表元素。

2024-01-01 15:57:13 912

原创 零基础代码随想录【Day2】|| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。拓展题目可以先不做。题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。:希望大家 也做一个自己 对数组专题的总结。题目建议: 本题关键在于理解双指针思想。209.长度最小的子数组。

2023-12-30 19:53:24 305

原创 零基础代码随想录【Day1】|| 二分查找,移除元素

要求:要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2023-12-28 20:43:29 346

空空如也

空空如也

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

TA关注的人

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