jiegongzhu3z
码龄1年
关注
提问 私信
  • 博客:17,059
    17,059
    总访问量
  • 41
    原创
  • 70,256
    排名
  • 163
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:河南省
  • 加入CSDN时间: 2024-04-21
博客简介:

jiegongzhu3z的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    389
    当月
    0
个人成就
  • 获得210次点赞
  • 内容获得3次评论
  • 获得148次收藏
创作历程
  • 41篇
    2024年
成就勋章
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

代码随想录算法训练营Day48||Leetcode 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II

(3)查找:.count(key)若存在value返回1否则返回2,与.find的区别是,前者返回的是布尔值 后者返回迭代器,没有找到则返回.end()用于找到数组中某个元素后边第一个比它大(用单增栈)/小(用单减栈)的元素。用了一个unordered_map来储存nums1数组的值和对应下标。循环的东西都与整除取模有关,虽然能想到思路,但是想不到在哪里取模。题解才用存放数组的方式,这里直接存放了nums2中的数据,写法更简便了。栈内元素从栈口到栈底保持单增或单减。栈中存放的是数组下标。
原创
发布博客 2024.08.29 ·
264 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day46||Leetcode 647. 回文子串 、 516.最长回文子序列

(取去掉一侧后的最大回文子串数,因为去掉了有可能是回文,但不去掉一定不是回文)dp[i][j]=dp[i+1][j-1]+2(中间的最大长度在加两边的端点)(四)遍历顺序,从左到右,从下到上(因为i j 需要从i+1 j-1推过来)(一)dp[i][j]为从下标i到下标j这一范围内的字符串是否为回文子串。(二)满足当前字符串为回文,或者区间内为回文,dp[i][j]=1。分析递推公式:dp[i][j]=1(一个字母一定为回文)
原创
发布博客 2024.08.22 ·
299 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day45||Leetcode 115.不同的子序列 、583. 两个字符串的删除操作、 72. 编辑距离

主要分析一下递推公式:dp[i][j]=dp[i-1][j-1](此为当前遍历的字符相同的情况,此时不需要做删除操作,直接继承前面)dp[i][j]=dp[i-1][j]+1,dp[i][j-1]+1的最小值(此为删除1个word1的当前字符或者删除word2的当前字符,所以在前者的基础上加1)(三)初始化:dp[i][0]=1第一列=1,意思是,当s不为空、t为空时s中必能找到一个子集(空集)dp[0][j]=0,意思是,当s为空、t不为空时,s中本身为空集找不出来一个子集。有了前面做基础,一遍过~
原创
发布博客 2024.08.21 ·
309 阅读 ·
5 点赞 ·
0 评论 ·
4 收藏

代码随想录算法训练营Day44||Leetcode1143.最长公共子序列 、 1035.不相交的线 、 53. 最大子序和 、392.判断子序列

nums2[j-1]的时候,从[i-1][j]和[i][j-1]两个方向推过来继承的,虽然递推公式麻烦了,但是最后返回的结果可以直接返回最后一个元素了。最长公共子序列的变形题,即判断长字符串中与短字符串公共的最长子序列是否等于短字符串长度即可,可以把最长公共子序列看做一个长字符串的一个子集,看看这个子集长度是否等于短字符串长度,从而推出前者属于后者的子集。(二)递推公式:dp[i]=dp[i-1]+nums[i]或dp[i]=nums[i](一)dp数组含义:到第i个之前,最大子数组的和。
原创
发布博客 2024.08.20 ·
368 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

代码随想录算法训练营Day42||Leetcode300.最长递增子序列 、 674. 最长连续递增序列 、 718. 最长重复子数组

(一)dp数组含义:dp[i][j]表示数组下标为i-1作为数组1的结尾,j-1作为数组2的结尾的的当前公共子数组的长度(不是i和j的原因是因为,第0个数需要第-1个数来推,下标越界)比上面那个更简单,上面还需要双指针遍历当前元素前面所有的元素,这个只需要找前一个元素。简单,只不过返回值不是dp数组最后一个元素了,自己做出来AC了。(四)遍历顺序,两个数组地位相同,先遍历谁都行。(三)初始化:全为0。二、 最长连续递增序列。
原创
发布博客 2024.08.17 ·
279 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day42||Leetcode 188.买卖股票的最佳时机IV 、309.最佳买卖股票时机含冷冻期、 714.买卖股票的最佳时机含手续费

持股状态可以从保持前一天持股、不持股买入的状态推过来,而不持股的状态又分为卖出后一直没买入,和冷冻期两个状态得来。这题和三差不多,只需要把Ⅲ中的4个状态替换成2k的状态,把分别赋值变成循环赋值即可。可以是保持一直没买入,也可从冷冻期推过来。一遍过简单只需考虑卖出时候扣去手续费就行。最后注意返回值要从三者选最大的返回。二、买卖股票最佳时机(含冷冻期)//dp[][1]保持不持股状态。//dp[][2]不持股状态。//dp[][0]持股状态。一、买卖股票最佳时机Ⅳ。三、含手续费的股票买卖。
原创
发布博客 2024.08.17 ·
201 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day41||动态规划 买卖股票最佳时机Ⅰ、Ⅱ、Ⅲ

dp[i][0,1,2,3,4]分别代表了第i天不操作、第一次购入(此后一直持有)、第一次卖出、第二次购入(此后一直持有)、第二次卖出操作。明天都可以买卖,因此这里的dp[i][0]就可以在dp[i-1][0]和dp[i-1][1]-prices[i]中取最大值。这个只买卖一次,与之前的区分开,所以这里的dp[i][0]=max(dp[i-1][0],例如第二次购入可以是在第i-1天第二次购入得来,也可以是第i-1天卖出再买进得来。后一状态就可以根据前一状态下来递推。
原创
发布博客 2024.08.14 ·
246 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day39||Leetcode 198.打家劫舍 、 213.打家劫舍II、337.打家劫舍III

第一次接触树形dp。有点复杂,也不算特别难。问题的关键是这题用dp数组控制的是本节点偷与不偷各自的钱数,与以往dp数组把握全局不同,这题由于递归函数入栈出栈,每经历一个节点就会 有一个新的dp[0] dp[1]用于存放这之前的所有数据,不需要特别长的长数组也可以实现更新的操作。易错点是在下面递归函数返回的时候,要把nostolen放前面与dp[0]对应,表示没偷的状态。(二)递推公式:dp[i]=max(dp[i-1](一)dp数组含义:第i个元素前能得到的最大钱数。(四)遍历顺序:从前往后。
原创
发布博客 2024.08.14 ·
314 阅读 ·
3 点赞 ·
0 评论 ·
2 收藏

代码随想录算法训练营Day38||Leetcode 322. 零钱兑换 、 279.完全平方数、139.单词拆分

这题说用背包根本想不到,甚至我都找不到谁是背包谁是物品,看完了题解以后感觉更像是双指针算法,理解是理解了,但是肯定写不出来第二遍了。(五)如果最后没有更改,说明没有能够组成J元的物品,则返回-1,更改了返回dp[amout](二)递推公式:dp[j]=min(dp[j],dp[j-coins[i]]+1)(三)初始化:dp[0]=0,解释为凑够0元的总件数为0,其他元素为最大值。(一)dp数值初始化:dp[j]凑够J元需要的件数。(四)遍历顺序:先物品后背包,完全背包前序遍历。
原创
发布博客 2024.08.11 ·
191 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day38||完全背包问题、leetcode 518. 零钱兑换 II 、 377. 组合总和 Ⅳ 、70. 爬楼梯 (进阶)

(二)递推公式:dp[j]+=dp[j-coins[i]]把数组中第一个元素所能组成的方法数一直加到最后一个元素所能组成的方法数。(二)递推公式:dp[j]+=dp[j-nums[i]]把数组中第一个元素所能组成的方法数一直加到最后一个元素所能组成的方法数。(一)dp数组含义:dp[j]为凑成总和为j,可以的方法数。(四)完全背包,正向遍历背包,组合问题选择先物品后背包。(一)dp数组含义:dp[j]为凑成j元可以的方法数。(四)完全背包,正向遍历背包,排列问题先背包后物品。(三)初始化:dp[0]=1。
原创
发布博客 2024.08.11 ·
283 阅读 ·
8 点赞 ·
0 评论 ·
2 收藏

代码随想录算法训练营Day36||Leetcode1049. 最后一块石头的重量 II 、 494. 目标和 、 474.一和零

正数集+负数集=sum,正数集-负数集=target,然后把负数集=正数集-target带入,得到正数集为(sum+target)/2;这题的思路一开始我想到了让相近质量的石头相碰,但是想不到题解的思路给他分成两队,并且能用转化成背包问题,用一个总质量一半的背包去收集能装的最大质量,剩下的就是另一部分。(二)递推公式:max(dp[i][j],dp[i-num0][j-num1]+1)(注意这里是物品数,不是0或1的个数,所以是+1)(一)dp[i][j]:装满i个0,j个1的背包需要多少个字符串。
原创
发布博客 2024.08.10 ·
222 阅读 ·
9 点赞 ·
0 评论 ·
3 收藏

代码随想录算法训练营Day35||01背包

第一行要从j=weight[0]时开始,第一行第j列以后全都赋值成value[0],其含义是在等于weight[0]之前,背包放不下,默认价值为0,等到可以放下以后,(同时第一行的意思是只放第0件物品)后面全都赋值为第0件物品的价值。因为本题的遍历j是从0开始遍历,临界点是j为第i件物品的质量,所以能装下的情况可能是要把之前装的所有的物品都拿出去,再放第i件,因此第i件单件的价值可能不如之前小件加起来都和。注意这里的m是物品的种类数,而i是第i件,前者从1开始计数,后者从0开始计数,这里的开闭要注意。
原创
发布博客 2024.08.08 ·
456 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

代码随想录算法训练营Day32||Leetcode 62.不同路径 、 63. 不同路径 II

(2)递推公式:dp[i]=(i-j)*j 和dp[i-j]*j(取二者最大值) 前者是拆成两个数的情况,后者是拆成多个数的情况。(2)递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1](3)dp数组初始化:dp[0]=0,dp[1]=0,dp[2]=1。(5)返回第(m,n)个点的方法数,即第[m-1][n-1]个坐标。(5)返回第(m.n)个点的方法数,即第[m-1][n-1]个坐标。(1)dp数组含义:到达坐标为[i][j]点的方法有多少种。(4)遍历顺序:由上到下,由左到右。
原创
发布博客 2024.08.05 ·
372 阅读 ·
10 点赞 ·
0 评论 ·
4 收藏

代码随想录算法训练营Day32||动态规划章节:Leetcode 509. 斐波那契数、70. 爬楼梯 、746. 使用最小花费爬楼梯

(2)dp[i]=dp[i-2]+dp[i-1],因为到第n阶可以看做是第n-1阶花一步到第n阶,也可以看做是第n-2阶花两步到第n阶,也就是说,到第n-1阶和到第n-2阶共有多少种方法,到第n阶就有多少种方法,第n-2阶也可以先花一步到第n-1阶,但是不需要计算这部分,因为在计算n-1的方法时已经算过了。(2)递推公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])意思是,可以从i-1阶到顶部,也可以从i-2阶到顶部,取其中花费最小的一步。
原创
发布博客 2024.08.04 ·
269 阅读 ·
3 点赞 ·
0 评论 ·
2 收藏

代码随想录算法训练营Day32||Leetcode56. 合并区间、 738.单调递增的数字、

先排序然后从第二组数据遍历数组,让后者的左边界为前二的最小值,右边界为前二的最大值,最后遇到不重叠返回前一组数据。最后把数组最后一个元素返回即可。题解这个写法确实有点新颖,先是记录前面大于后面的元素(直接赋值为i做标记),准备赋成9,赋成9相当于借了前面一位,前面需要--后再与前前比较。然后想着后面的数字如果大于前面,就让前面-1,后面赋成9,结果遇到相等的0就翻车了。一开始确实想用暴力,然后懒得写了看题解,结果题解说超时还好没写。
原创
发布博客 2024.08.02 ·
230 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day30||Leetcode452. 用最少数量的箭引爆气球、 435. 无重叠区间 、763.划分字母区间

第二是对如何判断可以用一支箭引爆多个气球:首先如果第i+1个气球的左边界在第i个气球的右边界以内,说明可以穿过,此时只需要让一支箭穿过。如果是看第i+2个气球的话,就要用它的左边界和i和i+1右边界的最小值进行比较,因为如果不在最小值的区间内,即使在较大的边界内,前面两个已经被同时引爆了,第i+2也就变成了一个新的单独的个体气球了,所以这里需要考虑最小值的更新。这题是上一题的反过来,上一题是遇到不重叠区间(不重叠气球)就++,这题是遇到重叠区间就++。相同点是都要更新最小边界。一、最少的箭引爆气球。
原创
发布博客 2024.08.01 ·
257 阅读 ·
3 点赞 ·
1 评论 ·
0 收藏

代码随想录算法训练营Day29||Leetcode 134. 加油站 、 135. 分发糖果 、860.柠檬水找零 、 406.根据身高重建队列

然后讨论成立能跑完的情况,作差值,对差值进行叠加遍历(rest的+=操作)如果从前面开始,已经出现了rest<0的情况,那么起始点一定不能选在前面,一定是从当前遍历到结果<0的点之后才能开始跑完,并且这种算法忽略了对环的考虑。然后排列好之后,把前面有几个比自己大对应的数量k作为新数组的下标插入操作也很让我佩服,直接插入既利用了数组的下标特性,又能保证后面的元素不断更新(如果插在同一个位置就是后来者占据这个位置,而后来者恰恰是我们排序后较小的元素,即使原来这个位置元素被顶替,也不会影响结果)
原创
发布博客 2024.08.01 ·
287 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

代码随想录算法训练营Day28|| Leetcode122.买卖股票的最佳时机II 、 55. 跳跃游戏 、 45.跳跃游戏II 、 1005.K次取反后最大化的数组和

第一遍做的时候没有读清题意,以为跳到哪,就必须按照对应的下标的步数跳,所以会漏掉很多用例。然后添加了步数区间中搜索最大可跳步数的操作后,通过用例仍然有少部分不通过的。一开始想着用暴力,一个for循环遍历数组,然后再用一个for循环找到后面比他大的值,存放在最大值里,这样不仅漏情况,又超时。一开始依然是用找最大值的方法做的,这样只是能够找到每一步能跳到接下来跳最远的 地方,并不能找到最后的最优解。题解的思路很巧妙,把一段时间的最大利润拆成每天相加减的最大利润。cover的意思是覆盖范围的末边界。
原创
发布博客 2024.07.31 ·
198 阅读 ·
6 点赞 ·
0 评论 ·
1 收藏

代码随想录算法训练营Day27||Leetcode455.分发饼干 、376. 摆动序列、53. 最大子序和

思路很好想,和题解一致,但是一开始用while来写频繁报错,原因是while循环内要用if 和else if连接,不能用两个if连用,因为如果满足第一个if,那么会执行相应操作,执行完毕后,又带着改后的数据,再去判断第二个if是否成立,所以会报错。本题思路是,遍历数组,记录连续子数组的和,如果说连续子数组和为负值,说明这个连续的和对后面的值有负影响,所以直接删去,更新为新元素。不理解 很懵 为什么题干上说了前差不等于0,后差等于0不满足,而题解中前叉等于0,后叉不等于0就满足了。
原创
发布博客 2024.07.30 ·
282 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

代码随想录算法训练营Day25||Leetcode491.递增子序列 、Leetcode46.全排列、Leetcode47.全排列 II 、Leetcode52.N皇后

的)就跳出本次循环。hash数组是用于记录同一层、同一深度上的重复元素的(横着看不重复)这里回溯不用让hash数组元素归零,原因是每个hash数组的作用域在每一层,每次递归进行向深层遍历到时候,都会定义一个新的hash数组,而我们用的hash就是需要记录本层的,不需要回退清零(有点难理解)这题和之前的区别是,不能先排序,也就不能用之前nums[i]和nums[i-1]来判断是否可以重复使用了。并且这里的used数组既要存放深度重复值也要存放广度的重复值,因此要作为参数传入函数,并且不要漏了&符号。
原创
发布博客 2024.07.29 ·
263 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏
加载更多