算法分类
算法分类
常见算法
1.贪心
2.动态规划
3.数学知识
4.搜索与图论
5.数据结构
6.字符串
7.二叉树
8.排序算法
9.二分算法
10.双指针/滑动窗口
11.位运算
12.模拟
13.枚举
14.递推与递归
15.算法技巧:高精度、前缀和与差分、离散化、区间合并、方向数组
16.杂题
17.总结
经验之谈
1.数组/单链表系列算法
双指针
二分搜索
滑动窗口
回文串
前缀和与差分数组
先学习像数组、链表这种基本数据结构的常用算法,比如单链表翻转,前缀和数组,二分搜索等
因为这些算法属于会者不难难者不会的类型,难度不大,学习它们不会花费太多时间。而且这些小而美的算法经常让你大呼精妙,能够有效培养你对算法的兴趣。
单链表常考的技巧就是双指针,后文 单链表六大技巧 全给你总结好了,这些技巧就是会者不难,难者不会。
比如判断单链表是否成环,拍脑袋的暴力解是什么?就是用一个 HashSet 之类的数据结构来缓存走过的节点,遇到重复的就说明有环对吧。但我们用快慢指针可以避免使用额外的空间,这就是聪明地穷举嘛。
当然,对于找链表中点这种问题,使用双指针技巧只是显示你学过这个技巧,和遍历两次链表的常规解法从时间空间复杂度的角度来说都是差不多的。
首先说二分搜索技巧,可以归为两端向中心的双指针。如果让你在数组中搜索元素,一个 for 循环穷举肯定能搞定对吧,但如果数组是有序的,二分搜索不就是一种更聪明的搜索方式么。
后文 二分搜索框架详解 给你总结了二分搜索代码模板,保证不会出现搜索边界的问题。后文 二分搜索算法运用 给你总结了二分搜索相关题目的共性以及如何将二分搜索思想运用到实际算法中。
类似的两端向中心的双指针技巧还有力扣上的 N 数之和系列问题,后文 一个函数秒杀所有 nSum 问题 讲了这些题目的共性,甭管几数之和,解法肯定要穷举所有的数字组合,然后看看那个数字组合的和等于目标和嘛。比较聪明的方式是先排序,利用双指针技巧快速计算结果。
**再说 滑动窗口算法技巧**,典型的快慢双指针,快慢指针中间就是滑动的「窗口」,主要用于解决子串问题。
文中最小覆盖子串这道题,让你寻找包含特定字符的最短子串,常规拍脑袋解法是什么?那肯定是类似字符串暴力匹配算法,用嵌套 ...