自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树

2、不同路径Ⅱ(需要重新思考)3、整数拆分(需要重新思考)

2025-07-29 10:32:34 904

原创 算法第28天|动态规划:基础理论、斐波那契数、爬楼梯、使用最小花费爬楼梯

1、动态规划的五部曲要复习2、动态规划的dp数组的含义及下标一定要定义清楚3、动态规划的dp数组的递推公式一定要根据题目进行分析4、动态规划的初始化一定要分析清楚(

2025-07-28 12:32:18 748

原创 算法第27天|贪心算法:合并区间 、单调递增的数字

因为比较的是当前数字与右边数字的大小,更改的是当前数字的大小(当前-1),所以其实顺序是从右向左才能将右边更改了的不动,更改左边的不会影响右边的数字。从后往前遍历,当前数字比前一个数字大,就将前边的所有数字变为9,当前数字减1,

2025-07-23 11:18:53 620

原创 算法第26天|贪心算法:用最少数量的箭引爆气球、无重叠区间、划分字母区间

如果当前区间的左端点在上一个区间的范围内(小于右端点,没有等)说明这两个区间重叠了:所以舍弃数量+1,更新右端点为小的右端点,相当于舍掉了右端点大的区间。如果当前区间的左端点不在上一个区间的范围内,说明没有重叠,舍弃数量不变,更新右端点为当前区间的右端点。(3)按照排序从小到大遍历,比较当前位置的左端点是否在前边位置的范围内(<=前边位置的最小右端点)如果在,就不加箭,只更新最小的右端点(前边的最小右与当前的右 比较取最小)mmap[1]=2,如果键1不存在,就插入{1,2}(2)如果有气球,至少1箭。

2025-07-22 11:47:16 914

原创 算法第25天|贪心算法:加油站、分发糖果、柠檬水找零、根据身高重建队列

遇到有利润的这种题型,一定要先想到两个数组的差是什么,而不是单独对每个数组进行讨论 遇到两个维度的题型,一定要定一个维度,再去讨论另一个维度,第二个维度的关系不能影响第一个维度本身已经设置好后的情况 错误点: 在确定第二个维度的时候,需要判断是当前孩子本身的糖果多,还是其右孩子糖果+1多 难点: 1、是一个二维数组,需要比较大小进行排列,使用so

2025-07-21 11:56:47 1062

原创 算法第24天|贪心算法:买卖股票的最佳时机Ⅱ、跳跃游戏、跳跃游戏Ⅱ、K次取反后最大化的数组和

同样,通过当前的覆盖范围,然后去遍历覆盖的值,获得最大的下一次覆盖位置。当走到当前覆盖的值的最后位置,要进行下一次跳跃,步数+1,更新当前的覆盖范围。计算每一天的利润,只要利润大于0的天数,获取的利润和就是总的最大利润。(2)如果k还有多余的,就需要将其转换绝对值最小的数,达到影响最小。(1)有正负,所以先将绝对值大的负数转换成整数使得和变得更大。整体上就是去求当前坐标与之前的坐标,最远能够覆盖的地方。注意:利润的数组要比股票价格数组少一位,因为第一天必定没有利润。

2025-07-15 22:13:48 410

原创 算法第23天|贪心算法:基础理论、分发饼干、摆动序列、最大子序和

摆动序列的三种特殊情况需要着重思考,感觉是没有思考清楚。

2025-07-15 11:34:30 1045

原创 算法第22天|回溯算法:递增子序列、全排列、全排列Ⅱ、重新安排行程、N皇后、解数独

只要有重复元素,就要使用nums[i-1]==num[i]或者一个map进行判断当前层。

2025-07-08 17:08:10 734

原创 算法第21天|回溯算法:复原IP地址、子集、子集Ⅱ

难点1:不能有前导0-->额外判断当前切割的子串size!=1&&下标0的值为0就退出循环难点2:数字是从0-255,所以最多有三位,且不能大于255难点3:字符串需要切割成四分,前三份后边需要添加".",大于4份直接return。

2025-07-07 15:57:10 262

原创 算法第20天|回溯算法:组合总和、组合总和Ⅱ、分割回文串

需要注意可以有重复元素,但是因为是组合不是排列,所以需要一个值来记录当前值是从什么地方递归下一层的,下一层不能再遍历之前的值(可以是上一层的当前值)难点1:需要判断是不是回文串,双指针难点2:分割题型,与组合题型类似,都是for循环横向遍历,递归回溯纵向遍历难点3;切割后获取子串的方式:(1)创建一个新的子串,使用迭代器获取开始结束位置(2)使用substr(cur,i-cur+1);表示子串从cur下标开始,向后i-cur+i个元素。

2025-07-07 12:26:07 1029

原创 算法19天|回溯算法:理论基础、组合、组合总和Ⅲ、电话号码的字母组合

回溯算法也叫做回溯搜索法,是一种搜索的方法。回溯是递归的副产品,只要有递归就会有回溯2、回溯算法的效率回溯法不是什么高效的算法,回溯法的本质是穷举,穷举所有可能,选出所需要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改变不了回溯法就是穷举的本质。3、回溯法解决的问题1、组合问题:N个数里边按一定规则找出k个数的集合2、切割问题:一个字符串按一定规则有几种切割方式3、子集问题:一个N个数的集合里有多少符合条件的子集4、排列问题:N个数按照一定的规则全排列,有几种排列方式。

2025-07-04 22:14:56 863

原创 算法第18天|继续二叉树:修剪二叉搜索树、将有序数组转化为二叉搜索树、把二叉搜索树转换为累加树

1、修剪二叉搜索树(重点思考如何修剪)

2025-07-02 15:24:47 1009

原创 算法第17天|继续二叉树:二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点

1、删除二叉搜索树中的节点(需要着重复习)当一个二叉树题目中用到返回值时,一定要清楚返回值是什么?返回的东西是赋值给什么变量的,什么时候添加返回值,什么时候接收返回值。

2025-07-01 22:32:34 939

原创 算法总结篇:二叉树

链式存储是使用指针指向左右子节点顺序存储的子节点位置。

2025-07-01 16:43:26 892

原创 算法第16天|继续二叉树:二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先

/定义一个全局最小差//定义一个当前节点的前一个节点,初始为nullptr。

2025-06-16 22:36:02 965

原创 算法第15天:继续二叉树|前序递归+回溯与前序递归的场景总结、最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

前序遍历是指从根节点开始,依次访问左子树、右子树,遍历顺序是中->左->右,回溯是在递归中回退到上一层的节点进行处理。前序遍历+回溯用于:(1)树的路径问题:例如查询从根节点到某叶子节点的路径、树中某个路径的和、找出所有路径和目标值匹配,回溯可以帮助在找到某个路径之后返回并继续遍历其他路径(2)树状态的管理:例如查找某个条件的所有路径、遍历树的过程中需要进行某些状态管理,回溯用于在子树遍历完毕后恢复状态前序遍历+回溯:处理树的多个路径或状态,在某条路径完成需要恢复路径。

2025-06-13 23:28:25 1586

原创 算法第14天|继续学习二叉树:找二叉树左下角的值、二叉树路径总和、从中序遍历与后序遍历序列构建二叉树

递归法重新思考如果题目要求匹配就结束,在递归中需要返回值,来提前结束寻找;需要反复思考递归的返回、输入、停止、单次逻辑。

2025-06-12 16:51:52 966

原创 算法第13天|继续学习二叉树:平衡二叉树(递归)、二叉树所有路径(递归)、左叶子之和(递归)

所以不需要到cur==nullptr,而是cur->left==nullptr&&cur->right==nullptr 触发写入路径。

2025-06-11 23:39:00 895

原创 算法第12天|继续学习二叉树:翻转二叉树、对称二叉树、二叉树最大深度、二叉树的最小深度

二叉树的深度,就是根节点到叶子节点的最远距离,可以使用递归的形式,从最下边开始计算节点的高度,直到根节点;此时的最小深度应该需要是从拥有的子节点的那条路径进行往下,所以需要在最大深度的代码上添加限制条件:出现一个子节点的时候要如何?迭代法就是在层序遍历迭代法的模板上,添加限制条件:寻找最先遇到的叶节点(左右子节点都没有)可以看作是两棵子树的关系,可以通过对左右两棵子树的对应位置进行判断:使用递归、迭代(两个对应节点一组入栈或队)(2)每次取出对应的两个节点,用于判断当前两个节点是不是相同(对称)

2025-06-10 19:28:22 1313

原创 算法第11天|二叉树的基础理论、二叉树的两种遍历方式

是一种特殊的树形结构,

2025-06-09 18:02:52 1188

原创 算法第10天|逆波兰表达式求值LeetCode150、滑动窗口最大值LeetCode239、前k个高频元素LeetCode347

(1)知道堆是通过优先队列priority_queue创建的(默认大根堆)(2)需要使用重载运算符,需要知道重载运算符的写法。

2025-06-07 19:31:30 795

原创 算法第9天|栈与队列基础、用栈实现队列LeetCode232、用队列实现栈LeetCode225、有效的括号LeetCode20、删除字符串中所有相邻重复项LeetCode1047

使用两个队列,队列A用于正常记录入栈,队列B用于在弹出栈顶、获取栈顶元素的时候,将A的除去最后的队尾元素全部加入到B中,然后获取A的队头元素,之后再将B的元素返还给A。当要输出时,如果输出栈有值就输出栈顶并删除,如果输出栈为空,将输入栈的所有值从栈顶弹出,让输出栈全部接收,从而实现元素从输入栈的栈尾到输出栈的栈顶的翻转,实现先进先出。,像是vector与queue的组合,与vector相比,deque在头部增删元素仅需O(1)的时间,与queue相比,deque像数组一样支持随机访问。

2025-06-06 12:06:33 781

原创 算法第8天|反转字符串中的单词LeetCode151右旋转字符串、KamaCoder55实现strStr()、LeetCode28 找出字符串中第一个匹配项的下标、LeetCode459重复的子字符串

今日总结:只会使用比较复杂的方法,先删除开头的空格、再删除单词与单词之间的空格、再删除结尾的空格;在459、重复的子字符串中,需要复习。

2025-06-05 22:51:29 1076

原创 算法第7天|反转字符串LeetCode344、反转字符串ⅡLeetCode541、替换数字LeetCode54

在循环中首先判断当前位置+k是不是超过了字符长度,超过了就反转到end,没超过就反转到i+k的位置。1、如果不使用额外的数组,首先确定的是要将字符串的尺寸resize为多大?3、从后往前,将字符直接复制到后边,遇到数字从后往前替换成“number”2、所以需要遍历字符串,查询有多少个数字,之后计算resize的尺寸。反转一个字符串,直接使用reverse库函数就行,这个函数在库。使用一个for循环,遍历整个字符串,每次增加2k;直接使用一个额外数组。

2025-06-04 12:28:28 393

原创 算法第6天|四数相加ⅡLeetCode454、赎金信LeetCode383、三数之和LeetCode15、四数之和LeetCode18

也可以使用[ ]进行对应的key查找对应的value,可以使用自加自减。2、在使用map、set的时候可以使用num.(iter/x) ,iter是迭代器,删除这个集合中的迭代器位置的元素,x是元素 ,会删除这个集合中所有x的元素。3、四数之和的减枝处理需要着重复习。

2025-06-03 12:38:32 706

原创 算法第5天|哈希表基础理论总结、有效的字母异位词LeetCode242、两个数组的交集LeetCode349、快乐数LeetCode202、两数之和LeetCode1

简单理解:哈希表就是一个数组,通过数组的下标索引访问数组中的元素哈希表作用:1、将一个庞大的值域映射到一个比较小的空间。2、判断一个元素是否 出现在集合中(哈希表的重要作用)所以使用哈希表时一般是对数据进行插入、查询,删除一般是通过另开一个数组,对冲突值打上标记,不去遍历它。哈希函数将大值域的数映射到小值域的函数,通过取模运算,确保每个值在哈希表中有对应的位置索引(但是当数据量>哈希函数的取模时,会导致哈希表中的一个索引位置有多个值,产生哈希碰撞。

2025-06-02 16:57:20 983

原创 算法第4天|两两交换链表中的节点LeetCode24、删除链表的倒数第N个节点LeetCode19、链表相交LeetCode02.07、环形链表ⅡLeetCode142

3、2(x+y)= x+y+n(y+z)--->x+y = n(y+z)--->x = (n-1)(y+z)+z:n一定是大于等于1的,因为n表示fast指针在环中出入多少次,大于等于才能追上slow。即如果在相遇的y节点之后,从头节点和z的起始节点同时指针向前前进,最后相遇的地方就是环形入口的节点;所以可以判断两个链表的长度,将长的链表移动到与短的链表一致的位置之后,开始遍历两个链表,查找第一个相同的节点指针(值、next)那么相遇时:x+y是slow指针的距离,相差两倍:2(x+y)就是fast距离。

2025-06-01 16:44:28 638

原创 算法第3天|链表理论基础、删除链表节点:LeetCode203、设计链表:LeetCode707 、反转链表:LeetCode206

链表是一种数据结构,通过一系列的“节点”连接在一起,每个节点存储两个信息:①数据:当前节点存储的值②指针:指向下一个节点的位置通过这些节点的指针,链表像“链条”一样把数据连接起来。

2025-05-31 17:27:09 793

原创 算法第2天|滑动窗口:LeetCode209长度最小的子数组、螺旋矩阵:LeetCode59螺旋矩阵Ⅱ、前缀和:KamaCoder58区间和、KamaCoder44开发商购买土地

主要思想:让值能够顺序的填入,在需要转弯的地方设置转弯条件转弯条件:1、当向右水平移动时(x不变,y增加),在最后会出界,需要向下转弯2、当向下竖直移动时(x增减,y不变),在最后会出界,需要向左转弯3、当向左水平移动时(x不变,y减少),在最后会出界,需要向上转弯3、当向上竖直移动时(x减少,y不变),在最后会覆盖(0,0),需要向右转弯1、y的下一个值>=n时,向下转弯2、x的下一个值>=n时,向左转弯3、y的下一个值<0时,向上转弯。

2025-05-30 17:14:38 611

原创 算法第1天|二分查找LeetCode704、LeetCode35、LeetCode34、|移除元素LeetCode27、LeetCode26、LeetCode283|有序数组平方LeetCode977

1、整数二分算法一定有解,但是需要检查解是不是所需要的解左闭右闭(常用,mid>=target):/*定义左区间*/l = 0/*定义右区间*/左闭右开(mid>target)/*定义左区间*/l = 0/*定义右区间*/3、整数二分步骤:步骤1:定义左右区间(常用左闭右闭)int l = 0;开始循环二分,直到l>=r停下while(l<r)...步骤3:在循环中定义中点位置,并进行中点位置与target的判断,更新端点int l = 0;while(l<r)

2025-05-29 18:27:24 625 1

空空如也

空空如也

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

TA关注的人

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