算法速成
有些同学想要学习算法题,但是时间很紧,自己的基础也不是很好,想要在空余时间完全掌握所有算法题确实有点不切实际了,终于去学习了遇到难题又半途而废,于是我总结了一下刷代码随想录题目的方法
先看b站视频:BV1fA4y1o715,有规划的看,每一类题可以看一到两道,看完去做题,感觉基本了解了就可以直接看代码随录博客的题目跟着做,因为看视频较为费时间,博客中的注释非常详细;写题时候,先只看题目自己写,实在无从下手就看他的思路解析,看完应该都能自己写了,如果连思路都看不懂,那么就求助gpt或者去看他的视频;
注意:
- 博客每一章的理论基础和总结一定要看,完全的大白话,那怕这章你只会1道题甚至不会,毕竟面试你能讲的头头是道,入职后谁又关注敲算法水品呢。
- 即便自己写出来了也不要忘了去看网站上的题解或立扣的最佳题解是不是思路和自己相同,锻炼时间和空间复杂度观念,多做题就可以大致判断哪种思路复杂度高,哪种思路复杂度低。
代码随想录 (programmercarl.com)
每周写题也要有一定的规划,
我分了几个阶段:
数组:
较为基础,且是之后写算法题和写程序的基石,自然需要看完,实在不行写前5道题,先自己写,写完了记得总结自己的思路和他的有什么区别,锻炼思维能力和写算法题的逻辑能力;看他的总结篇巩固做到事半功倍。
链表
题目较少,但个个精华,第一章理论最重要,后边的题目可以说都是对第一章理论的详细实现,后几道实在不懂可以跳过。
哈希表
难度由低到高,但越到后边的越是用哈希表的典型,可以自己写前边的,后边的看视频理解,手敲不出来得知道思路能讲出来。
字符串
字符串就是一看就会,一写就费的题,写完前五个应该是不成问题的,后边的引入了kmp,很重要,但…你懂的
没写的需要看题目和解析,实现strStr()还是很重要的。
双指针法
前五个是双指针在各种数据结构中的使用,是一定要看的,知道了才有去做难题的资格。
栈与队列
都很重要,全写
二叉树
用代码实现二叉树的各种基本操作就算入门了:
具体:更像是对二叉树数据结构的重现
-
-
### 二叉树的遍历: 1. **前序遍历二叉树:** - 实现二叉树的前序遍历(递归和迭代两种方式)。 2. **中序遍历二叉树:** - 实现二叉树的中序遍历(递归和迭代两种方式)。 3. **后序遍历二叉树:** - 实现二叉树的后序遍历(递归和迭代两种方式)。 ### 二叉树的基本操作: 1. **翻转二叉树:** - 翻转一棵二叉树。 2. **求二叉树的最大深度:** - 给定一个二叉树,求其最大深度。 3. **判断二叉树是否对称:** - 判断一个二叉树是否镜像对称。 ### 二叉树的路径和: 1. **路径总和:** - 给定一个二叉树和一个目标和,判断该树中是否存在从根到叶子节点的路径,使得路径上所有节点的值相加等于给定的目标和。 2. **路径总和 II:** - 给定一个二叉树和一个目标和,找到所有从根到叶子节点的路径,使得路径上所有节点的值相加等于给定的目标和。 ### 二叉搜索树: 1. **验证二叉搜索树:** - 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 2. **二叉搜索树中第 K 小的元素:** - 给定一个二叉搜索树,找到其中第 K 小的元素。
写前三类
回溯
先写:
- 组合总和:
- 给定一个无重复元素的数组 candidates 和一个目标数 target,找出 candidates 中所有可以使数字和为 target 的组合。同一个数字可以被选多次。
- 全排列:
- 给定一个没有重复数字的序列,返回其所有可能的全排列。
- 子集:
- 给定一个不含重复元素的整数数组 nums,返回该数组所有可能的子集。
- 组合总和:
-
再去写
- 电话号码的字母组合:
- 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。数字到字母的映射可以参考电话按键。
- 分割回文串:
- 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回所有可能的分割方案。
- 岛屿数量:
- 给定一个由 ‘1’(陆地)和 ‘0’(水)组成的二维网格,计算岛屿的数量。岛屿是被水包围并且通过水平或垂直连接相邻的陆地而形成的。
还有余力去写剩下的也可以,想要提高,以后都是要写的
贪心算法
ok,人家给出了难度等级,可以按难度练习
动态规划
题目类型很多,并且难题很难,但是简单题都是有套路的,可以写基础题目增加下自信心,后边的题。。你至少要知道这种类型,比如背包,子序列等等,
单调栈
是什么?
单调栈(Monotonic Stack)常常用于解决一些与元素大小关系相关的问题,特别是在求解下一个更大元素、下一个更小元素等问题时很有用.在使用单调栈时,通常会维护一个递增或递减的栈,以便在需要比较元素大小时能够高效地找到相应的解。全写
图论
- 深度优先搜索 (DFS):
- 使用深度优先搜索遍历图,可以从一个起始节点开始,沿着一条路径尽可能深地访问,然后回溯,继续深入其他路径。可以考虑求解连通分量、拓扑排序等问题。
- 广度优先搜索 (BFS):
- 使用广度优先搜索遍历图,可以从一个起始节点开始,依次访问其所有相邻节点,然后再访问相邻节点的相邻节点。可以考虑求解最短路径、层次遍历等问题。
- 最短路径算法 – Dijkstra算法:
- 求解图中两个节点之间的最短路径。Dijkstra算法是一种贪心算法,适用于边权值为非负的图。
- 最小生成树算法 – Prim算法:
- 求解一个连通图的最小生成树,即通过删除权值最大的边,将图中所有节点连接起来,并且总权值最小。
- 拓扑排序:
- 对有向无环图进行拓扑排序,使得所有的有向边从排在前面的节点指向排在后面的节点。适用于任务调度等场景。
- 强连通分量 – Kosaraju算法:
- 寻找有向图中的强连通分量,即任意两个节点都可以相互到达。Kosaraju算法是求解强连通分量的一种方法。
图论在面试中经常问到,尤其是深度搜索,最短路径,都是要掌握的。
注意
我的这篇博客指的是学习算法入门的最低限度,有时间一定要把随想录的题都写一遍,算法不是做完就结束了,需要勤加练习,在面试前至少是需要完整过两遍的。
写算法切忌三天打鱼,两天晒网
版权声明:本文为博主作者:佚名涙原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/qq_63728673/article/details/134617622