自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

数组在推导的时候一定是取价值最大的数,如果题目给的价值都是正整数那么。,则无论是什么物品都放不下,不能产生任何价值,直接为默认值。,其他下标应该初始化多少呢?的背包,所背的物品价值可以最大为。的背包,价值总和最大是多少。,如果背包容量不够,则设置为。的物品里任意取,放进容量为。初始化第一列:对应背包容量。所背的物品的最大价值就是。初始化第一行:对应物品。非0下标都初始化为0。

2024-05-09 22:28:58 406

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

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

2024-04-22 22:28:38 196

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

题目中说机器人每次只能向下或者向右移动一步,那么其实。用图论里的深搜,来枚举出来有多少种路径。

2024-04-22 16:23:18 343

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

(1)爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由 第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到。数组就行,除非面试官额外要求 空间复杂度,才用变量代替数组。回溯的本质是穷举,故会超时。相当于回溯算法的排列问题。只需要维护两个数值就可以了,不需要记录整个序列。数组打印出来看看和我们推导的数列是不是一致的。如果代码写出来,发现结果不对,就把。数组来保存递归的结果。如果在面试中,能写出。

2024-04-21 22:39:49 630

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

①情况1:左右节点至少有一个无覆盖的情况;有一个孩子没有覆盖,父节点就应该放摄像头。②情况2:左右节点至少有一个有摄像头;其实就是 左右孩子节点有一个有摄像头了,那么其父节点就应该是。③情况3:左右节点都有覆盖;左孩子有覆盖,右孩子有覆盖,那么此时中间节点应该就是无覆盖的状态了。递归结束之后,还要判断根节点,如果没有覆盖,摄像头的数量要。(子节点状态, 子节点状态) -> 当前节点状态。从后往前遍历,如果前一个数字大于后一个数字。递归的终止条件:遇到空节点,返回。,代表中间节点放摄像头。

2024-04-20 21:18:00 669

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

/先将区间按左边界从小到大排序 Arrays . sort(intervals ,(a , b) -> Integer . compare(a [ 0 ] , b [ 0 ]));//临时存放不重叠的区间 int left = intervals [ 0 ] [ 0 ];//按照重叠区间来比较,则最后一个区间需单独处理 for(int i = 1;i ++) {//如果区间不重叠 res . add(new int [ ] {

2024-04-19 18:10:55 800

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

(3)以按照气球的起始位置排序为例,需要从前向后遍历气球数组,靠左尽可能让气球重复。在遍历的过程中,判断当前气球与前一个气球是否重叠,如果重叠则。情况一,情况二,都是固定策略,情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。全局最优:最后都做完插入操作,整个队列满足题目队列属性。(1)局部最优:当气球出现重叠,一起射,所用弓箭最少。可以按照气球起始位置排序也可以按照气球终止位置排序,只不过对应的遍历顺序不同。类型的范围,从而导致错误的比较的结果。,并跳过当前气球,只有当前气球的左边界。

2024-04-16 23:25:10 924

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

这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,型的数据,而该方法只能根据指定比较器产生的顺序对指定的。全局最优:找到可以跑一圈的起始位置。循环遍历一次能同时判断是否有解,还能获取解对应的索引。,此时的问题是一个有序正整数序列,如何转变。方法的方式进行绝对值的降序排序,因为。进行绕环判断,每下个加油站对应坐标为。,作为起始点,对每个起始加油站使用。循环适合模拟环形遍历,要善于使用。循环适合模拟从头到尾的遍历,而。如果将负数都转变为正数了,②直接在流操作中使用流中的。

2024-04-16 12:50:53 749

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

从后往前遍历,关注每个节点i需要多少步能够到达最后一个位置。有点像动态规划思想,每个节点i需要的步数是 下一个节点到最后一个位置所需要的步数need加上i节点到下一个节点所需要的步数即+1,用dp数组可表示为need也就是dp[i]的取值:当当前i节点可跳跃的步数>=该节点到最后一个位置所需要的步数时,needdp[i]=0表明该节点可以完成跳跃,否则,意味着从当前节点起跳无法到达最后一个位置,需要其他节点来完成这段跳跃,这段跳跃的步数就是 该节点(i)到最后一个位置所需要的步数。

2024-04-13 21:26:49 807

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

就是设置起始位置,第二层。循环遍历数组寻找最大值。

2024-04-11 22:52:14 506

原创 代码随想录算法训练营第二十九天| 491.递增子序列、46.全排列、47全排列II

所以完全可以用数组来做哈希。一个排列里一个元素只能使用一次。在判断是否递增来决定是否加入。)能够映射到数组的下标(里都有哪些元素使用了。

2024-04-10 20:02:26 268

原创 代码随想录算法训练营第二十八天| 93.复原IP地址、78.子集、90.子集II

注:每切割一个数字后面加一个,切割到字符串末尾时, 多加了一个,故在每次加入结果时只截取即可。这里不能直接删除sb中最后一个,否则回溯恢复现场的时候会出错。//分隔.的个数,每个数字后面一个.,最终加入结果的时候去掉最后一个. public List < String > restoreIpAddresses(String s) {return res;//终止条件 if(pointCount == 0 && sb . length() == s . length() + 4) {

2024-04-09 22:58:13 291

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

就没有必要进入下一层递归。在for循环的搜索范围上,对总集合排序之后,如果下一层的target(就是本层的。的情况,其实是依然进入了下一层递归,只是下一层递归剪枝时候,会判断。在本层递归中返回:如果已经知道下一层的。在下一层递归中返回:对于。

2024-04-07 20:22:02 868

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

了),那么往后遍历就没有意义了,直接剪掉。②已选元素总和如果已经大于。个数)就是树的宽度。

2024-04-06 22:29:59 282

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

(递归函数)通过不断调用自己一直往深处遍历,总会遇到叶子节点,遇到了叶子节点就要返回。回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的。的下面部分就是回溯的操作了,撤销本次处理的结果。呢,因为包括起始位置,我们要是一个左闭的集合。

2024-04-06 17:14:40 610

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

这是一棵树,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13]。如果数组长度为偶数,中间节点有两个,取哪一个都可以,只不过构成了不同的平衡二叉搜索树。1.在构造二叉树的时候尽量不要重新定义左右区间数组,而是用下标来操作原数组。,分割点作为当前节点,然后递归左区间和右区间。,这么操作就越界了,尤其需要注意!,这么写其实有一个问题,就是数值越界,例如。区间在二叉搜索树的中可不是单纯的节点。的前一个节点,这样才方便做累加。就决定的,还要考虑节点。

2024-04-04 20:54:33 436

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

其中当要删除的节点的左右子树都不为空,一直循环找到右子树最左边的节点时,注意判断条件必须为。迭代法遍历的过程中,需要记录一下当前遍历的节点的父节点,这样才能做插入节点的操作。图片来自热心网友(大佬)指针来记录上一个节点。右子树的最左边节点的。

2024-04-03 17:01:41 587

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

其实就是一个有序数组。这道题就变成在一个有序数组上求两个数最小差值。在二叉搜索树中序遍历的过程中,可以直接计算。把这个树都遍历了(至于用前中后序哪种遍历不重要,因为就是要全遍历一遍,怎么个遍历法都行,层序遍历都没毛病),然后用。,因这样每次加入的都不是同一个对象,那所有节点的频次都为。只要把中序遍历转成迭代,中间节点的处理逻辑完全一样。节点记录一下cur节点的前一个节点。在获得最大频率时,可以。时,一定要注意泛型的使用,,要将每个节点的值作为。

2024-04-02 20:51:25 308

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

(中左右),先构造根节点然后才能递归去构造左右子树。与 106.从中序与后序遍历序列构造二叉树 和 105.从前序与中序遍历序列构造二叉树 相似。:递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。同时遍历就同时判断两个树的情况,改变其中一棵树的结构来当做需要生成的新的数。(1)递归,中序遍历,存放所有节点的val;,则不需要覆盖,直接用另一个二叉树返回就行。终止条件:如果其中一个二叉树的根节点为。通过队列成对存放两个树的节点即可。所以以上代码的判断逻辑是错误的。

2024-04-01 12:05:47 1887

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

为节点在中序遍历数组的索引值。传入中序和后序遍历数组以及他们的开始索引和结束索引。:最底层最左边节点的值不一定是左节点的值,也有可能是右节点的值。中的所有路径都变成了相同的路径,因为它们都引用了同一个。列表是一个引用类型的变量,当在后续的递归调用中修改。累加然后判断是否等于目标和,代码比较麻烦,耗时。列表的副本来实现这一点。②在构造左右子树时,传入的索引很容易出错,注意。中时,创建一个新的列表对象,而不是直接使用。中,而不会影响到后续的递归调用中的。的思路基本一样,区别在于该题中。:切割的索引很容易写错。

2024-03-28 22:19:33 716

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

从根节点开始到叶子节点的路径,必须前序遍历(先访问中节点,再访问左右节点),如果遇到叶子节点,就将字符串加入路径集合。:一个二叉树每个节点的左右两个子树的高度差的绝对值。但是本题的终止条件这样写会很麻烦,因为本题要找到。:要传入根节点,记录每一条路径的。(该逻辑可以控制空节点不入循环)用来拼接字符串(速度更快)。②终止处理逻辑(把路径放进。,这里递归不需要返回值。的时候,就找到叶子节点。不为空,其左右孩子都为。

2024-03-27 21:33:21 595

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

注:在遍历N个子节点时注意代码的健壮性,要考虑当前节点是否有子节点链表以及链表中的子节点是否为。(1)二叉树的最大深度 = 根节点的最大高度,父节点的最大高度 = 左右子节点高度的最大值。确定单层逻辑时,在循环遍历该节点的子节点时获取所有子节点的高度的最大值,再在循环后。(1)直接求深度,用前序遍历从上往下遍历,子节点的深度 = 父节点的深度。(需要先访问左右节点,再访问中节点,所以对应的是后序遍历)父节点的最小高度 = 左右节点的高度最小值。判断满二叉树的方法:向左遍历的深度。作为当前节点的高度。

2024-03-26 16:49:44 1557

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

②BFS–迭代方式–借助队列①最后返回的链表 需作为类的属性,因其需被该类的所有访问。②借助队列实现遍历元素,当队列不为空()时说明节点还没有遍历完;③在每一层遍历的时候,一定要使用固定大小的,不要使用,因为是不断变化的。(除了要将自己的值弹出来加入链表中,还要将自己的左右孩子放进队列中,作为下一层遍历。)③将每一层的元素放在一个链表里面,最后将每一层的加入到最终要返回的链表里面。107.二叉树的层次遍历 II相对于 102.二叉树的层序遍历,就是最后把链表反转一下就可以了。①使用类的方法

2024-03-25 12:15:17 809

原创 代码随想录算法训练营第十四天| 递归遍历、迭代遍历

思路:左中右,借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素。思路:中左右,先记录中间节点,再将右节点和左节点依次压入栈。思路:左右中,反过来就是中右左,那么入栈顺序就是中左右。注意:右节点比左节点先入栈,是为了先让左节点弹出。将要处理的节点放入栈之后,紧接着放入一个。

2024-03-21 21:17:02 275

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

个最高频次的元素的数组时,从数组后面开始加入元素,先弹出的是堆的根,出现次数少,后面弹出的出现次数多,这样最终该数字是从大到小返回的。个元素中出现次数最少的那个)时,弹出队头(小顶堆的根结点),即把堆里出现次数最少的那个删除,再加入当前元素即可。b表示在数组中的出现次数,出现次数按从队头到队尾的顺序是从大到小排,出现次数最多的在队头(相当于大顶堆)。在数组中的出现次数,出现次数按从队头到队尾的顺序是从大到小排,出现次数最多的在队头(相当于大顶堆)。个元素的数组,再加入优先级队列。Lambda 表达式。

2024-03-20 16:34:51 893

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

(2)每当遇到了左括号,就把对应的右括号(方便后面比较)加入栈内(用栈就可以保证后进去的可以先进行匹配,符合对称逻辑)。如果遇到了右括号,那么就与栈内的元素进行比较。最终出现的情况:遍历完了栈还有元素(多左),还没遍历完栈已经空了(多右),遍历元素与栈顶元素不相等(左右不匹配)。(1)不匹配的情况分为三类:①多了左括号,②多了右括号,③左右括号不匹配。表示的堆栈(换句话说,在此deque的头部),如果当前没有可用空间,则抛出。(2)减法和除法有先后顺序,故需用临时变量存下两个出栈的值,用后出栈的数。

2024-03-18 22:51:22 353

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

两个栈:①一个输入栈,负责进入数据;②一个输出栈,出队的时候将数据放到该栈中,这个过程就将出队顺序变得和队列一样了。支持两端元素插入和移除的线性集合。的,这两个数据结构的出队方式相反。

2024-03-18 19:56:45 334

原创 代码随想录算法训练营第八天|344.反转字符串,541.反转字符串II、54.替换数字(卡码网)、151.翻转字符串里面的单词、55.右旋转字符串(卡码网)

方法,而将数组转换成字符串可以用String类的构造器。这两种方法测试的耗时相同,②方法更简洁。方法进行判断是否为数字,若是数字则采用。转换成字符串,最后将字符串中的内容用。方法进行判断是否为数字,若是数字则将。方法进行翻转,再将翻转后的内容用。先将字符串的每个字符使用包装类。记录每2k的左边界和右边界)将字符串转换成字符数组可用。将输入的字符串先全部加入。是每次交换时的指针,中每个元素使用包装类。中,否则加入该字符。

2024-03-14 22:43:21 907

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

题解:因为两个字符串都是由小写字母组成的,所以说数据的范围是确定的,那么就可以用数组结构。用每个字符对应其数组下标,数组值就是每个字母出现的次数,最后遍历另一个字符串,需要的字母就。,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了。,最后看结果数组的是否有负值,有负值说明字母是不够的,返回。是否与右边元素相等,若相等则跳过该右边的元素。直接退出循环了,此时还没加入一个三元组,从而漏掉了。很多同学写本题的时候,去重的逻辑多加了 对。的方法是一样的,这个题的难点在于。,即使去重了,去重后得到的。

2024-03-13 22:50:14 861

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

剪枝:在已知不符合条件的情况下,剪枝避免做无效判断。因为遍历本质是在决策,决策是为了求得结果,已知结果的决策就没有必要进行了。①当不知道一个数是几位数时,求各个位上的平方和的方法要记住。数组的值就是元素出现的次数,也就是遍历到这个元素,对应的数组值就。这样就记录了第一个字符串中每个元素出现的次数。个元素是连续的,所以采用数组这种数据结构。中,然后看第二个数组的值有没有在里面出现,出现的话就记录。可返回包含此集合中所有元素的数组。这道题是数组在哈希表中的典型应用。循环,判断的条件是这个数。

2024-03-13 10:16:35 389

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

系列文章目录目录系列文章目录24. 两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II24. 两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II

2024-03-10 14:52:34 368

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

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

2024-03-08 22:30:52 359

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

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

2024-03-07 22:29:42 352

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

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-03-06 11:56:04 452

原创 P548-P552 0547-0551_韩顺平Java_集合家庭作业1-5

【代码】P548-P552 0547-0551_韩顺平Java_集合家庭作业1-5。

2024-02-27 15:35:30 362

原创 P494-P497 0493-0496_韩顺平Java_常用类本章作业

replace/*** @author 韩顺平*///测试System.out.println("===交换前===");//不正确直接退出程序,不往下执行System.out.println("===交换后===");//对输入的参数做一个验证//老韩重要的编程技巧分享!!!即过关斩将法。(想不正确的很难,但正确的比较容易)//(1) 写出正确的情况//(2) 然后取反即可//(3) 这样写,你的思路就不乱//(4) 不满足条件就抛出异常。

2024-01-25 17:04:35 423

原创 P485 0484_韩顺平Java_Arrays课堂练习

【代码】P485 0484_韩顺平Java_Arrays课堂练习。

2024-01-24 17:00:39 347 1

原创 P478 0477_韩顺平Java_StringBuffer练习2

【代码】P478 0477_韩顺平Java_StringBuffer练习2。

2024-01-23 11:51:42 335 1

原创 P437-442 0436- 0441_韩顺平Java_第10章家庭作业1-6

注:①静态代码块和静态属性初始化只有在类加载的时候执行 并且只加载一次。注:静态属性是类的所有对象共享的。,故注意要有小数点。

2024-01-09 12:29:31 392

原创 P362-372 0361- 0371 _韩顺平Java_项目-房屋出租系统

【代码】P362-372 0361- 0371 _韩顺平Java_项目-房屋出租系统。

2024-01-04 21:59:59 348 1

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

TA关注的人

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