- 博客(52)
- 收藏
- 关注
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营完结!
确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。 回溯函数模板返回值以及参数
2023-09-11 12:45:50 122
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第60天||84.柱状图中最大的矩形 完结篇
终于结束啦哈哈哈哈哈哈哈哈哈哈太不容易了。跟接雨水好像差不太多,具体看卡哥。
2023-09-09 09:27:53 104
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第59天||503.下一个更大元素II 42. 接雨水
用i%nums.size()来代替i, 用for遍历时遍历两次。
2023-09-08 09:58:29 120
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第58天|| 单调栈! 739. 每日温度 496.下一个更大元素 I
/ 直接查找nums2的下一个最大元素,但在查找时加一个判断,看num1中是不是有这个。// 有的话写在res的对应位置中(通过哈希)看自己写的注释,维护一个单调栈。在卡哥代码上加了注释。
2023-09-07 23:40:30 117
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第57天|| 647. 回文子串 516.最长回文子序列 动态规划总结篇
如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子串的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;初始化:当i与j相同,那么dp[i][j]一定是等于1的,即:一个字符的回文子序列长度就是1。注意递归公式和遍历顺序。
2023-09-06 22:36:21 105
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第55天|| 392.判断子序列 115.不同的子序列
因为s是t的子序列,当i-1=j-1时,长度加一;当不等于时,相当于不要j-1这个数,长度跟到j-2的长度相同,即dp[i][j] = dp[i][j-1]// d【i】【j】是到i-1,j-1的最长相同字串数。
2023-09-04 12:44:58 100
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第53天|| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划
用dpij表示两个串中到i-1和j-1个字符结束的最长公共子序列长度(不用特殊初始化)所以取决于加上i位置数的和或者重新开始算这个数的最大值。包括下标i之前的最大连续子序列和为dp[i]。本质上就是找最长公共子序列,跟上题一样。
2023-09-03 13:21:04 169
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第52天||300.最长递增子序列 674.最长连续递增序列
dp[i][j]是指nums1[i-1]和nums2[j-1]为结束的长度,如果说dp[i][j]是指nums1[i]和nums2[j]为结束的话,不好初始化,因为需要比较每一个i和j相不相同;dpi的值取决于前面比他小的数字(dpj)+1;是连续递增,只需要考虑前一个,而不是前面的每一个。dp为取到i时的最长序列数字。
2023-09-01 14:15:33 133
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第51天||309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 股票总结
四个状态需要想,持有/不持有且过了冷却期/当天卖/正处于冷却期;只是多了一个在卖出时要减去手续费。
2023-08-31 13:04:27 85
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第50天|| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV
/ 买两次就是当天买当天卖后,又买了一次。dp[i][0]不操作,1持有一次,2卖一次不持有,3持有2次,4卖二次不持有;因为k次买卖,所以一共2K+1个(算上不操作的0),第i天都有一个for循环更新所有dp;可以看成一共只有dp[i][j+1] (买入)和dp[i][j+2](卖出)两种状态。// 买两次就是当天买当天卖。
2023-08-30 11:55:55 97
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第49天||121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
有两种情况,昨天就不持有股票所以直接等于昨天,或者是今天卖出了,将昨天持有股票的价格+今日价格。两种:昨天就持有了,所以等于昨天持有的价格,以及今天刚买(-price(i))
2023-08-29 14:55:54 69
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第48天||198.打家劫舍 213.打家劫舍II 337.打家劫舍III
分成两种情况,第一种是从第一个到倒数第二个之间最大的dp,第二种是从第二个数到倒数第一个数最大的dp,最后取最大值;所以写了一个函数来算dp,分别算出来。最大值 = max(取左孩子,不取左孩子)+ max(取右孩子,不取右孩子)+ 根节点值;dp[0]为不偷时最大值, dp[1]是偷时最大值。最大值 = 不取左孩子的值 + 不取右孩子 + 根节点值;每个节点只有两个状态(取和不取);因为是个环,所以要考虑首尾;力扣进不去,在牛客写的。
2023-08-28 15:08:08 30
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第45天||70.爬楼梯 322.零钱兑换 279.完全平方数
【代码】非科班菜鸡算法学习记录 | 代码随想录算法训练营第44天||完全背包理论基础。
2023-08-26 15:22:34 59
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第44天||完全背包理论基础
【代码】非科班菜鸡算法学习记录 | 代码随想录算法训练营第44天||完全背包理论基础。
2023-08-24 21:12:39 51
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第43天||1049.最后一块石头的重量II 494.目标和
跟分割等和子集一样,重量= 价值,分割等和子集就是找能不能找到一组 dp【sum/2】 = sum/2;而本题也是找 dp【sum/2】 = sum/2;再最后对分成的两堆算差值。注意测试用例有数组和的绝对值小于target觉得值的情况,此时无结果。本质上一样,只是重量条件变成了两个,同样都要是--
2023-08-24 09:43:34 60
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第42天||0-1背包问题理论 416.分割等和子集
dp[i][j]:表示可以在【0, i】范围内拿物品,重量不超过【j】的最大重量;所以二维递推公式为:压缩一维后:原理:从后往前遍历j,因为此时用到的dp是上一层的dp;具体写法:i ++) {j--){ //注意j要大于nums[i]
2023-08-22 21:14:44 54
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第41天||343. 整数拆分 96.不同的二叉搜索树
【代码】非科班菜鸡算法学习记录 | 代码随想录算法训练营第41天||343. 整数拆分 96.不同的二叉搜索树。
2023-08-21 14:25:13 94
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第39天||62.不同路径 63.不同路径II
思路:在初始化时要如遇到障碍,需要将该点和之后的置零;在往下dp时,如遇到障碍点,直接跳过(dp默认为0)
2023-08-20 09:03:27 26
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第38天||理论基础 509.斐波那契数 746.使用最小花费爬楼梯
dpi是由站在两步前上的所花的体力dpi-2 + 上到i层所花费的体力costi-2的和 与 站在1步前上的所花的体力dpi-1+ 上到i层所花费的体力costi-1的和 的最小值(题目求最小体力)注意本题中,站在楼梯上不花费体力,只有往上上才花体力,所以dp0,dp1都是0;到楼顶是指到cost数组最后一个的下一个,所以是求dp[size];dp 是走到i时所花费的最小费用。
2023-08-18 10:10:36 31
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第37天|| 738.单调递增的数字 968.监控二叉树 总结
738.单调递增的数字738.单调递增的数字。
2023-08-17 10:04:31 71
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第36天|| 435. 无重叠区间 763.划分字母区间 56. 合并区间
先排序,从i=1开始,当不重复时把i-1区间加入res;重复释时更新i的区间(并没插入res);遍历完成时最后一个区间还没进入res;遍历时每次更新目前能到的最后位置right,当最后位置right == 当前位置i时,就是一段结果;再更新下一段的起点left;跟射气球思路一样,只不过在更新数组右边界时取最小的,相当于去除右边界大的(对其他重叠区间影响最小)先记录每个字符的最后位置。
2023-08-16 13:55:19 20
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第35天||860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
先按左区间排序,这样我只需要比较下一个区间的左与当前区间的右是否重叠,不重叠就需要多一只箭;则需要更新下一个区间的右边界,更新成当前右和下一个右之间的最小值(原因是下下个区间的左只有在这两个最新小的右中,才能一个箭都射中);注意insert用法:insert(a, b) 把b放在迭代器a所指的位置(a= vector. begin + i).再按照前边有几个比自己高的任插入到对应的位置,也就是a[i][1]的数字;高的人看不到矮的人;所以先按照身高从大到小排序;可以不使用数组,直接用三个数。
2023-08-15 10:24:11 28
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第34天||1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
1005.K次取反后最大化的数组和。
2023-08-14 14:08:40 23
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第32天||122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
当遍历到当前的最大位置了,跳跃次数++,并将下一次的位置更新到当前(有点像新的一层)cover为可以跳跃的最大位置,每次for。记录当前能到的位置和下一次的位置。
2023-08-12 15:33:04 36
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第31天||贪心理论 455.分发饼干 376.摆动序列 53. 最大子序和
先从小到大排序,当最大的饼干比最大的孩子大时候,遍历第二大的孩子和饼干;当饼干满足不了该孩子时候,haizi--,看看同样的饼干能否满足下一个胃口稍小的孩子;直到饼干没了或者孩子没了;count统计和,当为负时直接置零,前面的都不要了;主要判断平坡,具体看卡哥题解。
2023-08-11 12:18:13 64
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第30天||332.重新安排行程 51. N皇后 37. 解数独 都跳了||回溯总结
直接跳了太难了二刷再看一些注意细节:如果是一个集合来求组合的话,就需要startIndex;如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex。
2023-08-10 10:36:47 33
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第29天||491.递增子序列 46.全排列 47.全排列 II
用used数组记录是否使用过,在数层上时,只有used【i-1】为false时能用,因为used是回溯回来右重置成false了,此时说明该树枝重复了。需要去重,但不是直接排序然后相邻去重,因为会破坏原来顺序;所以是用unordered_set去重;当path最后一个数字大于nums[i]或者在本层用过该数字时->跳过;用一个布尔used来保存这个数用没用过,用过的话就跳过,回溯的时候记得改回来。注意:unordered_set不需要pop,因为每层都有一个。取叶子节点说明遍历到头了return;
2023-08-09 13:18:49 37
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第28天||78.子集 90. 子集II 93.复原IP地址
注意:有重复元素所以需要去重;单层遍历:如果这层从startindex到i符合ip地址->加分割点->pointnums++;->遍历下一层(注意加完点后下一层的位置会变)->去除点-> pointnums--;说明这个数字0开头了,因为最左面为0且不是最后一位;结束条件:三个点了已经,判断第三个点后(第四块数字)是否为争取数字,如果是,字符串插入到res;num计算这个数的数值是否为0-255;
2023-08-08 09:44:04 38
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第27天||39.组合总和 40.组合总和II 131.分割回文串
注意:一开始想的是组合,所以253中25和52是一样的,不知道怎么去重;实际上可以先对数组排序,每次只在该数字的后边去找函数参数:传入数组,target,当前sum,和当前开头数字位置;终止条件:只有target等于sum时写入数组,小于时直接返回;单层处理,因为是无限重复可以取自己,所以startindex就是自身i。
2023-08-07 10:05:57 37
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第24天||理论基础 77. 组合
再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。什么时候达到了终止条件,树中就可以看出,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。回溯搜索的遍历过程:首先加入path,进行i+1位置的回溯;在回溯算法中,我的习惯是函数起名字为backtracking,这个起名大家随意。
2023-08-04 11:08:48 60 1
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第23天||669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇
代码随想录 (programmercarl.com)
2023-08-03 15:26:57 28
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第22天|| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
235. 二叉搜索树的最近公共祖先。
2023-08-02 14:05:47 29
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第21天||530.二叉搜索树的最小绝对差501.二叉搜索树中的众数 、 236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差。
2023-08-02 13:04:07 61
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第20天||654.最大二叉树 617.合并二叉树 、700.二叉搜索树中的98.验证二叉搜索树
654.最大二叉树。
2023-08-01 19:32:10 58 1
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第18天||513.找树左下角的值112. 路径总和、113.路径总和ii106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树
513.找树左下角的值。
2023-08-01 18:54:31 30 1
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第17天||110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和
};*/// 版本一private:// 中,中为什么写在这里,因为最后一个节点也要加入到path中// 这才到了叶子节点i++) {return;
2023-07-31 21:02:38 27 1
原创 非科班菜鸡算法学习记录 | 代码随想录算法训练营第16天||104二叉树的最大深度、111二叉树的最小深度、222完全二叉树的节点个数
【代码】非科班菜鸡算法学习记录 | 代码随想录算法训练营第16天||104二叉树的最大深度、111二叉树的最小深度、222完全二叉树的节点个数。
2023-07-27 11:15:19 58 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人