- 博客(9)
- 收藏
- 关注
原创 算法基础提升-Day01-并查集和KMP
思想:KMP算法可以节省字符串比较的时间,首先将字符串生成上述的最长前缀的数组,假设str1和str2匹配到字符s时发现不一样,不要将指针全都移回去,对于str1,指针不动,str2的指针返回到最长前缀的下一个字符即可。思想:对于字符串的某一字符,他的最长前缀是他往前的字符串的最长前缀,例如对于'abcabcd'来说,d的最长前缀为3,第一个字符的前缀定为-1。遍历二维数组,一旦遇到1,就使用递归,将连成一片的1都改写为2,res++,继续遍历即可。此外,你可以假设该网格的四条边均被水包围。
2025-02-23 19:51:06
337
原创 算法学习-Day17-暴力递归
暴力递归在leetcode刷题时,虽然经常超时,毕竟递归压栈比较耗时,但是暴力递归可以让我们完成算法上的进阶,许多我们不会的算法题,通过暴力递归都可以做出来,而且,这是一种承上启下的做法,之后,暴力递归可以进化成动态规划,所以,学习暴力递归也是很重要的。
2025-02-22 18:01:34
1722
原创 算法学习-Day16-前缀树和贪心算法
我们很容易以为直接将所有字符串按照字典序排列,然后拼接起来即可,但这样是错的,比如:b 和 ba,由于b的字典序小于ba,所以拼接结果为bba,但是,很明显,bab的字典序更小。对于贪心算法,许多时候都是凭借感觉写出来的,因为贪心算法的比较策略的证明是很难的,所以我们可以使用笨方法验证算法的正确性,即对数器。将所有项目根据起始资金放入一个小根堆,当成锁定的项目,将起始资金小于所拥有资金的项目解锁,然后根据利润放入一个大根堆,再将大根堆的第一个弹出,就做这个项目,获取利润,再解锁项目,重复k次即可。
2025-02-21 13:10:28
445
原创 算法学习-Day15-图
对于图的算法,由于图的存储结构太多,每种算法都要根据存储结构的不同而修改,所以,可以选一种存储结构来练习coding,在笔试出现各种各样的存储结构时,可以使用代码转换存储结构,变成我们平时练习的存储结构。
2025-02-19 21:52:04
697
原创 算法学习-Day14-二叉树拓展
所以,递归时,一旦遇到null或者node1或者node2时,直接返回,如果不是,则查看左右子树的返回结果,如果都不为空,说明是第二种情况,返回当前节点即可,如果有孩子不满,则返回非空的那一个,都没有,则返回空。思想:使用层次遍历二叉树,将节点和其父节点都放入HashMap中,然后将node1节点到根节点所要经过的节点都放入一个set中,然后循环node2到根节点所需要经过的节点,如果节点存在于set中,则返回,这就是最小共同祖先。思想:使用层次遍历,对出队列的节点的孩子进行判断,完成上述要求即可。
2025-02-17 23:56:15
1634
原创 算法学习-Day13-二叉树
思想:不使用hashMap记录节点的层数,使用curEnd和nextEnd记录当前层的结束节点和下一层的结束节点,每当有节点进队列时,将nextEnd记为当前节点cur,当cur等于curEnd时,说明当前层已结束,将curEnd置为nextEnd即可,最后,将最大的节点数返回。思想:从头节点开始将左孩子不断压栈,当没有左孩子时,开始出栈,同时打印,然后将节点置为出栈节点的右孩子,不断重复该过程,即可。思想:先将头节点压栈,在循环中,将节点从栈中弹出打印,然后将弹出节点的右孩子压栈,然后将左孩子压栈。
2025-02-16 21:02:36
322
原创 算法学习-Day12-链表coding
思想:不使用另外的空间,遍历链表,将当前节点cur复制成cur‘,同时将cur’作为cur的next,即遍历链表,将链表从1->2->3 改成 1->1'->2->2'->3->3',重新遍历链表,设置radom,将cur‘的random设置为cur的random的next即可,最后,分离链表即可。思想:使用六个变量,分别记录小于区的头和尾、等于区的头和尾和大于区的头和尾,遍历链表,小于的加入小于区,等于的加入等于区,大于的加入大于区,最后将三个区的头尾相连。例:1->2->3->2->1。
2025-02-15 21:53:22
300
原创 算法学习-Day10-选择排序、归并排序和快速排序
我们可以这样来做:将左边定义为less,右边定义为more,起始时将less=-1,more=nums.length-1,然后遍历数组,当遍历到小于比较数的元素时,将less++,然后将less和当前元素交换,然后遍历下一个,当遍历到大于比较数的元素时,将more--,同时交换当前元素,但要将交换过来的元素重新比较,当遍历到等于比较数时,直接跳过,遍历下一个,最后,要将最后一个元素与more交换位置。思想:快速排序就是递归使用荷兰国旗算法,但比较数的选择策略是随机挑选,然后递归使用算法。
2025-02-13 23:09:36
441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅