《代码随想录(Carl)》 数据结构与算法 职业素养+经验总结记录(一)

《代码随想录(Carl)》 数据结构与算法

一数据结构类题目

1.1 职业素养+经验总结

1代码开发上的习惯问题,在工业级别代码开发中,最忌讳的就是:实现一个类似的函数,直接把代码粘过来改一改就完事了。
这样的项目代码会越来越乱,一定要懂得复用,功能相近的函数要抽象出来,不要大量的复制粘贴,很容易出问题!(踩过坑的人自然懂)[自己工作中亲身经历代码复用时导致灾难性事故,功能抽象成函数调用=》复制粘贴修改。]
工作中如果发现某一个功能自己要经常用,同事们可能也会用到,自己就花点时间把这个功能抽象成一个好用的函数或者工具类,不仅自己方便,也方便了同事们。
同事们就会逐渐认可你的工作态度和工作能力,自己的口碑都是这么一点一点积累起来的!在同事圈里口碑起来了之后,你就发现自己走上了一个正循环,以后的升职加薪才少不了你!【栈与队列1_0232.用栈实现队列】
2在企业项目开发中,尽量不要使用递归!在项目比较大的时候,由于参数多,全局变量等等,使用递归很容易出现return的条件判断不充分,非常容易无限递归(或者递归层级过深),造成栈溢出错误,系统输出的异常是
Segmentation fault(这种问题还不好排查!)。
3针对二叉树的问题,解题之前一定要想清楚究竟是前中后序遍历,还是层序遍历。【226. 翻转二叉树】
4所以建议⼤家做题的时候,⼀定要想清楚逻辑,每⼀步做什么。把每道题⽬所有情况想到位,相应的代码
写出来之后,再去追求简洁代码的效果。【101. 对称二叉树】
5递归函数什么时候要有返回值,什么时候没有返回值,特别是有的时候递归函数返回类型为bool类型。
如果需要遍历整颗树,递归函数就不能有返回值;如果要搜索其中⼀条符合条件的路径,递归函数就⼀定要有返回值!因为遇到符合条件的路径了就要及时返回。还有一种就是后序遍历需要根据左右递归函数的返回值计算中间节点的状态时需要有返回值。【112. 路径总和】
6如何切割,以及边界值找不好很容易乱套。
此时应该注意确定切割的标准,是左闭右开,还有左开右闭,还是左闭右闭,这个就是不变量,要在递归中保持这个不变量。在切割的过程中会产⽣四个区间,把握不好不变量的话,⼀会左闭右开,⼀会左闭右闭,必然乱套!【106. 从中序与后序遍历序列构造二叉树】
在二分查找以及螺旋矩阵中都强调过循环不变量的重要性,在二分查找以及螺旋矩阵的求解中,坚持循环不变量⾮常重要,本题也是。【数组1_0704.二分查找】【数组5_0059.螺旋矩阵II】
7构造二叉树思路其实⽐较简单,但是真正代码实现出来并不容易。所以要避免眼⾼⼿低,踏实的把代码写出来。⼤家遇到这种题⽬的时候,也要学会打⽇志来调试(如何打⽇志有时候也是个技术活)。因为这种题⽬是不太容易写出来调⼀调就能过的,所以⼀定要把流程⽇志打出来,看看符不符合⾃⼰的思路。
1分析设计后得出阶梯思路初步编写完代码后,先用1个正常测试用例进行大脑运行模拟;
2加日志,用几个测试用例进行代码测试;
【106. 从中序与后序遍历序列构造二叉树】
8注意类似⽤数组构造⼆叉树的题⽬,每次分隔尽量不要定义新的数组,⽽是通过下表索引直接在原数组上操作,这样可以节约时间和空间上的开销。【654. 最大二叉树】
9什么时候递归函数前⾯加if,什么时候不加if,其实就是不同代码⻛格的实现,⼀般情况来说:如果让空节点(空指针)进⼊递归,就不加if,如果不让空节点进⼊递归,就加if限制⼀下, 终⽌条件也会相应的调整。
【654. 最大二叉树】例如,因为终⽌条件是判断叶⼦节点,所以递归的过程中就不要让空节点进⼊递归了。【112. 路径总和】
10这道题⽬是⼀个简单题,但对于没接触过的同学还是有难度的。所以初学者刚开始学习算法的时候,看到简单题⽬没有思路很正常,千万别怀疑⾃⼰智商,学习过程都是这样的,⼤家智商都差不多。
只要把基本类型的题⽬都做过,总结过之后,思路⾃然就开阔了。【98. 验证二叉搜索树】
11遇到在⼆叉搜索树上求最值,差值之类的,要思考⼀下二叉搜索树可是有序的,中序遍历输出的⼆叉搜索树节点的数值是有序序列,要利⽤好这⼀特点。可以把它想成在⼀个有序数组上求最值,求差值,这样就简单多了。同时要学会在统一循环/递归中序遍历的过程中采用全局二叉树节点指针pre记录上一个节点与当前遍历节点cur进行相应的计算,这个技巧很有用。【530. 二叉搜索树的最小绝对差】
12利⽤递归函数的返回值完成新加⼊的节点与其⽗节点的赋值操作:下⼀层将加⼊节点返回,本层⽤root->left或者root->right将其接住,可以带来便利的。【701. 二叉搜索树中的插入操作】
13本题递归函数有返回值,是因为回溯的过程需要递归函数的返回值做判断,但本题我们依然要遍历树的所有节点。在递归函数有返回值的情况下:如果要搜索⼀条边,递归函数返回值不为空的时候,⽴刻返回,如果搜索整个树,直接⽤⼀个变量left、right接住返回值,利用left、right进行后序遍历中间节点的逻辑处理(也是回溯)。【236. 二叉树的最近公共祖先】

感谢Carl对于LeetCode中的数据结构与算法题目的系统讲解工作,可查看网页 linkhttps://programmercarl.com
linkhttps://github.com/youngyangyang04/leetcode-master 中的讲解文档。
按照类型从基础到提高循序渐进的过程选择经典题目高频面试题来讲解,大大提高了学习数据结构与算法知识和刷题效率,解决了浪费的时间主要三个问题点:1找题;2找到了不应该现阶段做的题;3没有全套的优质题解可以参考。
按照如下类型来练习:数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构,从简单刷起,做了几个类型题目之后,再慢慢做中等题目、困难题目。
经过系统的知识学习和技能练习现对整个知识体系的掌握有了一个质的飞跃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值