ORIPID
码龄4年
关注
提问 私信
  • 博客:19,903
    19,903
    总访问量
  • 25
    原创
  • 46,172
    排名
  • 187
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2021-02-03
博客简介:

zhuabazhuabahuo的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    219
    当月
    51
个人成就
  • 获得337次点赞
  • 内容获得4次评论
  • 获得311次收藏
  • 代码片获得354次分享
创作历程
  • 25篇
    2024年
成就勋章
TA的专栏
  • 代码随想录
    1篇
兴趣领域 设置
  • Python
    python
  • 数据结构与算法
    算法
  • 前端
    html5
创作活动更多

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

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

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

代码随想录算法训练营第二十四天 | LeetCode122.买卖股票的最佳时光机II、LeetCode55.跳跃游戏、LeetCode45.跳跃游戏II、LeetCode1005.K次取反最数组和

局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大。数组中的每个元素代表你在该位置可以跳跃的最大长度。:把利润分解为每天为单位的维度,局部最优:收集每天的正利润,全局最优:求得最大利润。:我的贪心策略是:如果后一天比前一天下跌了,那么就抛售,而等到上涨的时候购买股票。
原创
发布博客 2024.11.16 ·
699 阅读 ·
24 点赞 ·
0 评论 ·
7 收藏

代码随想录算法训练营第二十三天 | LeetCode455.分发饼干、LeetCode376.摆动序列、LeetCode53.最大子序和

贪心算法并没有固定的套路,靠自己手动模拟感觉可以局部最优推出整体最优,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。:只想到了两次for循环暴力求解,但是失去了算法题的意义,我记得《算法之魂》这本书详细讨论过这道题,但我还是不得要领。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。,这个孩子会得到满足。:贪心策略:先给孩子的胃口和饼干的大小从小到大排序,然后依次满足小胃口孩子。做题的时候,只要想清楚局部最优是什么,如果推导出全局最优,其实就够了。
原创
发布博客 2024.11.14 ·
454 阅读 ·
23 点赞 ·
0 评论 ·
6 收藏

代码随想录算法训练营第二十二天 | LeetCode491.递增子序列、LeetCode46.全排列、LeetCode47.全排列II

回溯总结回溯就是深度优先搜索!
原创
发布博客 2024.11.11 ·
337 阅读 ·
3 点赞 ·
0 评论 ·
9 收藏

代码随想录算法训练营第二十一天 | LeetCode93.复原IP地址、LeetCode78.子集、LeetCode90.子集II

这道题目写了好久好久才写出来,主要问题在于递归的终止条件不太清楚,并且判断每个整数段是否位于。:其实就是组合,但需要把空集加入结果集,并且每个叶子节点都要记录。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。:和之前的组合总和II很相似,也是需要一个去重的过程。,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。思路大差不差,但录哥直接在原字符串中。返回该数组所有可能的子集(幂集)。之间组成,且不能含有前导。之间组成,且不能含有前导。,这些地址可以通过在。
原创
发布博客 2024.11.07 ·
300 阅读 ·
4 点赞 ·
0 评论 ·
4 收藏

代码随想录算法训练营第二十天 | LeetCode39.组合总和、LeetCode40.组合总和II、LeetCode131.分割回文串

组合回溯问题,由于同一个数字可以无限制重复被选取,且整数数组中为正整数,所以终止条件应该是总和等于目标整数,而循环为从startIndex开始。:通过startIndex去重,这个是最接近我思路的代码,不过我的去重条件是i>=1,这里就很不对。:意识到需要去重,明明只要跳过去重复节点就好,但不知道咋实现,多次尝试无果,遂看录哥讲解。:树枝无需去重,而树层需要去重!如果至少一个数字的被选数量不同,则两种组合是不同的。分割成一些子串,使每个子串都是回文串。对于给定的输入,保证和为。:解集不能包含重复的组合。
原创
发布博客 2024.11.06 ·
339 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

代码随想录算法训练营第十九天 | LeetCode77.组合、LeetCode216.组合总和III、LeetCode17.电话号码的字母组合

很暴力的方法我知道,无非就是字符串中每一个字符对应一个集合,然后集合里的元素互相匹配,但是不知道怎么用代码实现。:和前面组合问题不能,树中每层节点为新的集合,所以index应该指向新的字母进行递归。:思路一致,但剪枝更加彻底,一方面是超过了目标和,另一方面是剩余元素个数小于k。回溯法解决的问题:组合问题、切割问题、子集问题、排列问题、棋盘问题。:照猫画虎,组合问题每次就取当前元素后面的范围中k-1的数的组合。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。
原创
发布博客 2024.10.31 ·
913 阅读 ·
9 点赞 ·
0 评论 ·
11 收藏

代码随想录算法训练营第十八天 | LeetCode669.修剪二叉搜索树、LeetCode108.将有序数组转换为二叉搜索树、LeetCode538.把二叉搜索树转换为累加树

题型关键理念二叉树的遍历前序、中序和后序;层序翻转二叉树前序、后序遍历对称二叉树遍历两棵树二叉树的最大深度、最小深度后序遍历完全二叉树的节点个数递归、通过2n-1优化平衡二叉树分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1二叉树的所有路径前序遍历、回溯左叶子之和当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和找树左下角的值找深度最大的叶子节点路径总和。
原创
发布博客 2024.10.25 ·
784 阅读 ·
12 点赞 ·
0 评论 ·
5 收藏

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

中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]:完成带返回值的递归算法、不带返回值+记录前一个节点信息的递归算法、带前一个节点信息的迭代算法。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。:基本沿用普通二叉树的最近公共祖先算法,但对于二叉搜索树可以做出一定的性能优化。
原创
发布博客 2024.10.24 ·
702 阅读 ·
6 点赞 ·
0 评论 ·
16 收藏

代码随想录算法训练营第十六天 | LeetCode530.二叉搜索树的最小绝对差、LeetCode501.二叉搜索树中的众数、LeetCode236.二叉树中的最近公共祖先

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(:究其原因是首先中序遍历到最左侧叶子节点不知道咋加入到数组里,然后最后的节点如果和前一个节点相等,如何能够在自然结束的时候再进行一次处理。:遇到在二叉搜索树上求最值,差值之类的,可以把它想成在一个有序数组上求最值,求差值。:对于中序的处理,可以先纯碎将目光集中于计数,然后再根据计数的情况实时更新数组。给你一个含重复值的二叉搜索树(BST)的根节点。
原创
发布博客 2024.10.23 ·
590 阅读 ·
12 点赞 ·
0 评论 ·
15 收藏

代码随想录算法训练营第十五天 | LeetCode654.最大二叉树、LeetCode617.合并二叉树、LeetCode700.二叉搜索树中的搜索、LeetCode98.验证二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;:类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。:实际上当前节点需大于左子树中的所有节点,小于右子树中的所有节点,我这样判断左右孩子是不对的。:前中后序遍历都可以,对于两颗树的处理的终止条件需要考虑,然后本题可以在遍历过程中保证同步。:递归,当前节点大于左孩子,小于右孩子,同时保证左子树是二叉搜索树,右子树是二叉搜索树。:给定二叉树的根节点。
原创
发布博客 2024.10.23 ·
708 阅读 ·
8 点赞 ·
0 评论 ·
5 收藏

代码随想录算法训练营第十四天 | LeetCode513.找树左下角的值、LeetCode112.路径总和、LeetCode113.路径总和ii、LeetCode106.从中序与后序遍历序列构造二叉树

可以使用前序遍历(当然中序,后序都可以,因为本题没有 中间节点的处理逻辑,只要左优先就行),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。:录哥的代码首先是把路径求和转化为目标值的递减,叶子节点的处理在父节点的函数中完成,因此会有一个回溯的过程,而我的这种代码无需回溯。:层序遍历,记录每组出队的第一个元素,最后一层第一个元素就是二叉树最底层最左边的节点。:事实上我的代码没有回溯,也就是没有减值的过程,很奇怪,能正常运行,稀里糊涂的。是指没有子节点的节点。是二叉树的中序遍历,
原创
发布博客 2024.10.17 ·
702 阅读 ·
12 点赞 ·
0 评论 ·
20 收藏

代码随想录算法训练营第十三天 | LeetCode110.平衡二叉树、LeetCode257.二叉树的所有路径、LeetCode404.左叶子之和、LeetCode222.完全二叉树的节点个数

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。:判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。:可先判断当前树是否为完全二叉树(一直向左遍历计算深度,一直向右遍历计算深度),再进行递归。:本想用层序遍历实现,但这也得立足当下,放眼后两个节点,非常复杂,遂直接看录哥代码。:普通二叉树通过遍历来统计节点数量,但完全二叉树节点数量为2。,返回所有从根节点到叶子节点的路径。
原创
发布博客 2024.10.16 ·
501 阅读 ·
14 点赞 ·
0 评论 ·
11 收藏

代码随想录算法训练营第十二天 | LeetCode226.翻转二叉树、LeetCode101.对称二叉树、LeetCode104.二叉树的最大深度、LeetCode111.二叉树的最小深度

求深度用前序遍历(中左右),求高度用后序遍历(左右中),而根节点的高度就是二叉树的最大深度,所以用后序遍历求高度来做本题。:想要用递归,然后递归函数是比较两个子树,但是每一层要比较的字数数量指数增长,不知道该怎么遍历,遂看录哥讲解。:修改递归取最小值的逻辑,当一侧子树为空,另一侧不为空的时候最小值应该是一侧。:递归,交换左右孩子,其实很像遍历,但稀里糊涂就写出了前序遍历,没有太理解。:实际上先求深度再求最大深度也行,用前序遍历方式,有待实现。,翻转这棵二叉树,并返回其根节点。需要复习并独立完成代码。
原创
发布博客 2024.10.16 ·
796 阅读 ·
23 点赞 ·
0 评论 ·
10 收藏

代码随想录算法训练营第十一天 | 二叉树递归遍历、迭代遍历、统一遍历、层序遍历

二叉树的遍历方式:深度优先遍历(前序遍历、中序遍历和后序遍历)、广度优先遍历(层次遍历)然后后序遍历和前序遍历存在以下转化关系: 中左右->中右左->左右中。二叉树的种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树。二叉树的存储方式:链式存储(链表两个指针)、顺序存储(数组):就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。:借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素。:不清楚怎么通过栈实现迭代遍历。:掌握递归遍历的算法。
原创
发布博客 2024.10.14 ·
899 阅读 ·
17 点赞 ·
0 评论 ·
13 收藏

代码随想录算法训练营第十天 | LeetCode150.逆波兰表达式求值、LeetCode239.滑动窗口最大值、LeetCode347.前K个高频元素

题型关键理念栈实现队列双栈协同队列实现栈循环转圈有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值栈处理相邻元素滑动窗口最大值自定义单调队列前K个高频元素小顶堆栈与队列总结。
原创
发布博客 2024.10.11 ·
814 阅读 ·
11 点赞 ·
0 评论 ·
7 收藏

代码随想录算法训练营第九天 | LeetCode232.用栈实现队列、LeetCode225.用队列实现栈、LeetCode20.有效的括号、LeetCode1047.删除字符串中的所有相邻重复项

我想到了第一个栈用来存元素即可,但第二个栈怎么取元素没太想明白,本来是打算每次pop的时候把第一个栈中的元素推到第二个栈中,然后pop一次第二个栈,在推回到第一个栈,但是过于复杂,遂直接看代码随想录。两个栈可以进行联动,第一个栈放进元素,第二个栈用于取元素,调用push的时候如果第二个栈为空了就把第一个栈的元素全部push进第二个栈中。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的,vector,deque,list均可。:用栈实现队列的方法,注意代码的复用。
原创
发布博客 2024.10.10 ·
848 阅读 ·
12 点赞 ·
0 评论 ·
28 收藏

代码随想录算法训练营第八天 | LeetCode151.翻转字符串里的单词、卡码网55.右旋转字符串、LeetCode28.实现strStr()、LeetCode459.重复的子字符串

题型关键理念反转字符串首尾指针反转字符串IIfor循环一段一段处理替换数字预先给数组扩容带填充后的大小,然后在从后向前进行操作翻转字符串中的单词整体翻转再局部翻转、前后指针删除空格左旋、右旋字符串整体翻转再局部翻转strStr()、重复的子字符串KMP字符串总结。
原创
发布博客 2024.10.09 ·
791 阅读 ·
15 点赞 ·
0 评论 ·
16 收藏

代码随想录算法训练营第七天 | LeetCode344.反转字符串、LeetCode541.反转字符串II、卡码网54.替换数字

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。先创建一个空字符串,直接遍历一遍字符串,然后里面的字符如果是字母,直接push_back,如果是数字,则加上"number"这个字符串。:申请一个新的字符数组就违反了题目的要求,然后突然想到反转字符串其实就是首尾两个字符进行交换,双指针法!:很复杂地先计算组数,然后计算剩余字符数,然后一组一组处理,剩余字符再处理,最后拼接在一起。:通过i+=2k可以分段处理,不要思维定势!
原创
发布博客 2024.10.08 ·
1002 阅读 ·
20 点赞 ·
0 评论 ·
18 收藏

代码随想录算法训练营第六天 | LeetCode454.四数相加、LeetCode383.赎金信、LeetCode15.三数之和、LeetCode18.四数之和

题型关键理念有效的字母异位词array赎金信array两个数组的交集快乐数两数之和四数相加II单数组内部三数之和、四数之和、N数之和N-1层循环+双指针哈希表主要掌握三种数据结构+想到要判断集合中是否有某个元素就选择哈希表哈希表专题总结。
原创
发布博客 2024.10.07 ·
862 阅读 ·
12 点赞 ·
0 评论 ·
8 收藏

代码随想录算法训练营第五天 | LeetCode242.有效的字母异位词、LeetCode349.两个数组的交集、LeetCode202.快乐数、LeetCode1.两数之和

其实我想到了字母的特殊之处(连续的ASCII码),也想到了用数组存储字母出现的次数,进行比对的过程我想用两个数组的,但不太清楚c++怎么处理字符串(脑中里全是strcat之流,纯纯被c语言毒害了),再者不清楚c++的其他map、set的写法,索性先看录哥的讲解再写代码。:第一想法是以数组为哈希表的载体,数组nums1中出现过的数记为1,然后再遍历一遍nums2,找到记为1的放在集合中,即为交集。:c++查询字符串可以通过括号下标来索引、两字符相减可以得到ascii码的差、在原数组上进行操作可以直接比对。
原创
发布博客 2024.10.06 ·
716 阅读 ·
11 点赞 ·
0 评论 ·
15 收藏
加载更多