算法之路
初级算法
数组
删除排序数组中的重复项
1 | 由于给定的数组是有序的,相同的元素是连续的 => 可采用前后两两比较 => 双指针 |
买卖股票的最佳时机
1 | 1. 动态规划 |
旋转数组
1 | 1. 临时数组法 |
存在重复的元素
1 | 1. hashset |
只出现一次的数字
1 | 1. 位运算(较好) |
两个数组的交集
1 | 1. 排序后,进行一个比较 |
加一
1 | 从后往前,判断当前位的数字是否为9。 |
移动零
1 | 1. 非零的往前移 |
两数之和
1 | 1. 暴力破解 |
旋转图像
1 | 数组矩阵的规律 |
字符串
反转字符串
1 | 1. 采用双指针交换 |
整数反转
1 | 从后往前,每一位进行反转 |
字符串中的第一个唯一字符
1 | HashMap |
有效的字母异位词
1 | 统计字符串中,每个字符的数量 |
验证回文串
1 | 双指针 |
最长公共前缀
1 | 先拿第一个字符串作为前缀,不断和下一个字符串进行比较 |
树
二叉树的深度
1 | 1. 递归(dfs) |
二叉搜索树的验证
1 | 1. 递归 |
对称二叉树
1 | 1. 递归 |
将有序的数组转换为二叉搜索树
1 | 1. 递归 |
排序和搜索
合并两个有序数组
1 | 1. 归并排序 |
第一个错误的版本
1 | 1. 二分查找 |
动态规划
爬楼梯
1 | 分析: |
最大子序和
1 | 1. 动态规划 |
打家劫舍
1 | 1. 动态规划 |
中级算法
数组和字符串
三数之和
1 | 双指针 |
矩阵置零
1 | 两次遍历 |
字母异位词
1 | 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 |
无重复的最长子串
1 | 双指针 |
最长回文子串
1 | 中心,往两边扩散法 |
链表
相交链表
1 | 双指针法 |
两数相加
1 | 1. 计算sum |
树
二叉搜索树中的第k小的元素
1 | 中序遍历 |
回溯算法
电话号码的字母组合
1 | 回溯模版 |
括号生成
1 | 思想: |
全排列
1 | // list结果 |
子集
1 | 参考全排列 |
单词搜索
1 | // 待搜索的矩阵board |
排序与搜索
颜色分类
1 | 红色往左移,蓝色往右移 |
前k个高频元素
1 | 统计每个元素的次数 |
数组中的第k个最大元素
1 | 输入: [3,2,1,5,6,4], k = 2 |
寻找峰值
1 | 二分查找 |
动态规划
跳跃游戏
1 | 1.确定状态 |
不同路径
1 | 1.确定状态 |
零钱兑换
1 | 1.确定状态 |