算法刷题经验分享

算法刷题推荐环境

力扣+牛客网+编译器(调试bug打断点,不建议常用,考试是以牛客为主)

算法深层次理解

懂得这个算法的逻辑很重要,算法的多重实现代码逻辑一定要看,如快排。
知道这个算法,更要懂得怎么运用。二叉树的遍历,二叉树的题大部分都是围绕遍历解决的,想着这个遍历能解决什么问题,怎么运用。快排解决了第K大的数等,这道题的背后思想是快排算法,就是这种算法的思想去改进题目,这就是大概的万变不离其宗了。字符串匹配特别喜欢考KMP,还有马拉车算法,再者就是考察动态规划或者二维遍历。

算法刷题路线我推荐专题刷法

原因一:是在某个专题持续刻意练习,有助于更深刻理解该专题的知识点和考察点,还要题型的变化,通过大量的题型训练,可以知道这种题考察的多种角度以及变化,要做到举一反三,还有多种题型变为一种题型。

原因二:持续做一种题型大大提高了刷题的成就感,体验到刷题的乐趣,增加自己的自信心。

学会看题解

要学会学习别人优秀的代码,这个很重要。思考别人的代码为啥这么设计,有什么好处,自己也要学会去运用。

专题路线

链表
我推荐链表(30题)为先,我的博客已经总结好链表题型和重点。先刷专题的简单和中等难度,大部分笔试和面试考察都这两种难度为主。刷会了链表,就会运用指针,以及双指针解法,遍历,滑动窗口等。为后续的二叉树奠定了一定的基础,同时也掌握了链表很重要的思想----穿针引线。接着就刷二叉树(50题),二叉树是一个很重要的数据结构。刷了二叉树就知道,二叉树的题大部分围绕二叉树的四种遍历方式(前序遍历(根左右),中序遍历(左根右),后序遍历(左右根))

二叉树
二叉树的遍历可分为递归和非递归。二叉树的非递归遍历一般借助用栈(stack),队列(queue),双端队列(deque)。二叉树非递归的遍历学会了,也就会用了stack,queue,deque等数据结构,然后queue又和BFS(宽度优先搜索)有关系,也可以慢慢会用了BFS。接着来说二叉树的递归遍历,学会了二叉树的递归遍历,就可以延伸去学习DFS(深度优先搜索),回溯(backtrack),因为DFS和backtrack本质就是递归,会发现二叉树的很多题是用DFS和backtrack来解决的或借助与DFS和backtrack遍历二叉树完成该题的解法。二叉树刷完后,就慢慢熟悉了stack,queue,deque,BFS,DFS,backtrace。最后就剩下几大重要的算法,排序,查找,字符串,动态规划,贪心算法。

排序算法
快排,堆排序(优先级队列,本质上是树),归并排序,桶排序,插入排序,冒泡排序。

二分查找
重点要注意访问数组边界,多看模板,多总结。熟练记忆和理解查找的三种模板。

字符串
字符串(30题)和动态规划(笔试高频考点),百分80的字符串可以用动态规划去做,动态规划是自底向上的遍历方法,自顶向下可以转换为自底向上的,而自顶向下是递归做法,类似于树的结构,一涉及递归最好画出树。

贪心算法
贪心算法和动态规划(50题)有关系,动态规划的题设计的好一点就是贪心算法,都是解决最优子问题。动态规划相对其他算法较难,难在于题的灵活,动态方程的建立。动态规划重点掌握0-1背包和完全背包。

总结:大家做了很多算法题,发现很多算法的代码大部分都是用for,while,if else等语句。关键在于找出算法题的重复子问题。

你可能感兴趣的:(算法)