为什么学算法?
为什么要学习算法?
- 算法是内功,决定你武功的高度
- 算法能让你更好更快理解一门语言系统的设计理念
- 算法能让你触类旁通
- momo算法题:接雨水 反转链表II 旋转矩阵
主要算法
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯算法、递归、深度优先遍历,BFS广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
数据结构
- 数组与链表:单 / 双向链表
- 栈与队列
- 哈希表
- 堆:最大堆 / 最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树) / 后缀树
1、常见数据结构
数组 链表 栈 队列 树
链表
- 删除链表中的节点
- 单链表反转
- 环形链表 & II
- 合并两个有序的链表
- 删除链表倒数第n个结点
- 求链表的中间结点
- 两数相加 Meidum
- 删除链表的倒数第N个节点 Medium
- 两数相加 II Medium
- 删除链表中的节点 Easy
- 奇偶链表
- 反转链表 Easy
- 反转链表 II Medium
- 两两交换链表中的节点 Medium
方法1:非递归
方法2:递归
- 相交链表 Easy
- 回文链表 Easy
- 合并两个有序链表 Easy
- 环形链表 Easy
- 13)环形链表 II Medium
方法1:Hash
方法2:快慢指针(Floyd 算法)
方法3:快慢指针(普通法)
2、高级数据结构
- 优先队列:前K个高频单词
- 二叉树
- 图: 检测一个图是否为二部图
- 前缀树:单词查找II
- 线段树:计算后续较小元素的数量
- 树状数组:二位区域求和
3、排序
4、递归与回溯
5、深度优先于广度优先搜索
- 深度优先于广度优先搜索递归实现
- 复杂度
- LeetCode:寻找最短路径
6、动态规划
- LeetCode:求最长的一个上升子序列
- 动态规划难点:递推公式
- 动态规划解题分类(一):线性规划
- LeetCode经典:不同路径
- 动态规划解题分类(二):区间规划
- LeetCode经典:最长的回文子序列
- 动态规划解题分类(三):约束规划
- LeetCode经典: 0-1背包问题
7、二分搜索与贪婪
8、高频真题
- 无重复字符的最长子串
- 求两个排序树组的中位数
- 合并K个有序链表
- 合并区间
- 无重叠区间
- 火星字典
- 基本计算器
- 正规表达式匹配
- 柱状图中最大的矩形
- 实现strStr()-KMP算法
- 回文对
- 至多包含K个不同字符的最长子串
- 收集雨水II
9、字节Top50
- 两数之和
- 两数相加
- 无重复字符的最长子串
- 最长回文子串
- 接雨水
- 反转链表
- 寻找两个有序数组的中位数
- 盛最多水的容器
- 两数之和
- 合并两个有序链表
- 最大子序和
- LRU缓存机制
- K 个一组翻转链表
- 买卖股票的最佳时机
- 分发糖果
- 搜索旋转排序数组
- 有效的括号
- 合并K个排序链表
- 合并区间
- 整数反转
- 字典序的第K小数字
- 回文数
- 数组中的第K个最大元素
- 全排列
- 删除链表的倒数第N个节点
- 下一个排列
- 编辑距离
- 岛屿数量
- 复原IP地址
- 爬楼梯
- 正则表达式匹配
- 相交链表
- 二叉树的中序遍历
- 二叉树的层次遍历
- 二叉树的锯齿形层次遍历
对称二叉树
- 二叉树的右视图
- 零钱兑换
- 螺旋矩阵
- 字符串转换整数 (atoi)
- 括号生成
合并两个有序数组
重排链表
最长公共前缀
- 二叉树的最大深度
- 第二高的薪水
- 最长有效括号
- 两两交换链表中的节点
- 单词搜索
- 买卖股票的最佳时机 II
10、LeetCode top100
top100
-
Next Post
iOS越狱初体验
-
Previous Post
算法基础