文章目录
- 算法-贪心(Java实现)
- 算法-并查集(Java实现)
- 算法-排序(Java实现)
- 算法-数学/模拟(Java实现)
- 算法-滑动窗口与前缀和
- 算法-二分查找(Java实现)
- 数据结构专练-链表
- 算法-字典树(Java实现)
- 数据结构专练-字符串
- 算法-搜索DFS与BFS(Java实现)
- 算法-动态规划(Java实现)
- 算法-位运算(Java实现)
- 算法-哈希表(Java实现)
- 算法-递归和分治(Java实现)
- 算法-树&二叉树&二叉搜索树(Java实现)
- 算法-栈和队列(Java实现)
- 所有代码地址:[Javastudy/algorithm/src/main/java](https://github.com/liushengxi13689209566/Java-study/tree/master/algorithm/src/main/java)
Java优先队列实现大顶堆和小顶堆
//默认为小顶堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>(k, (a,b)->a-b);
PriorityQueue<Integer> minHeap = new PriorityQueue<>(k, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b;
}
});
//大顶堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(k, (a,b)->b-a);
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(k, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return b - a;
}
});
算法-贪心(Java实现)
算法-并查集(Java实现)
- 剑指 Offer II 116. 省份数量
算法-排序(Java实现)
- 剑指 Offer II 074. 合并区间
算法-数学/模拟(Java实现)
- 剑指 Offer 44. 数字序列中某一位的数字
- 剑指 Offer 66. 构建乘积数组
算法-滑动窗口与前缀和
- 最长重复子数组(给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 )
- 11.盛最多水的容器
- 剑指 Offer II 010. 和为 k 的子数组
- 剑指 Offer II 008. 和大于等于 target 的最短子数组
- 剑指 Offer II 009. 乘积小于 K 的子数组
- 剑指 Offer II 057. 值和下标之差都在给定的范围内
- 剑指 Offer II 012. 左右两边子数组的和相等
算法-二分查找(Java实现)
- 剑指 Offer 11. 旋转数组的最小数字
- 寻找重复数
数据结构专练-链表
- 剑指 Offer 35. 复杂链表的复制
- 剑指 Offer 25. 合并两个排序的链表
- 剑指 Offer II 025. 链表中的两数相加
- 剑指 Offer II 077. 链表排序
- 剑指 Offer II 022. 链表中环的入口节点
- 82.删除排序链表中的重复元素 II
算法-字典树(Java实现)
- 代码实现前缀树
-
- 单词搜索 II
- 剑指 Offer II 063. 替换单词
数据结构专练-字符串
- 剑指 Offer 58 - I. 翻转单词顺序
- 求两个字符串的最大公共子串(一看到两个字符串的“最值”问题,一般想到二维dp)
- 剑指 Offer II 095. 最长公共子序列(类似的最长子序列等等都是DP的经典解法)
- 剑指 Offer II 063. 替换单词
- 剑指 Offer 45. 把数组排成最小的数
- 滑动窗口模板与思路
- 最小覆盖子串
- 剑指 Offer II 016. 不含重复字符的最长子字符串(里面有滑动窗口的具体实现)
- 剑指 Offer II 018. 有效的回文
- 5.最长回文子串
算法-搜索DFS与BFS(Java实现)
- 剑指 Offer 12. 矩阵中的路径
- 完全二叉树的节点个数
- 剑指 Offer 34. 二叉树中和为某一值的路径
- 剑指 Offer 38. 字符串的排列
- 括号生成
- N皇后的问题
- 数独问题
- 组合总和(给定数组和target,找所有实现)
- 剑指 Offer II 079. 所有子集
- 剑指 Offer II 084. 含有重复元素集合的全排列
给定一个可包含重复数字的整数集合 nums ,按任意顺序 返回它所有不重复的全排列。
算法-动态规划(Java实现)
- 最小路径和
- 把数字翻译成字符串
- 带因子的二叉树
- 剑指 Offer 49. 丑数
- 爬楼梯
- 三角形最小路径和
- 乘积最大子数组
- 121 股票买卖序列
- 121 从始至终只能买卖一次股票系列
- 122 可同天,可以交易无数次的情况
- 最长递增子序列
- 剑指 Offer 42. 连续子数组的最大和
- 剑指 Offer II 103. 最少的硬币数目
- 剑指 Offer II 102. 加减的目标值
算法-位运算(Java实现)
- 位运算的一些技巧
- 剑指 Offer 56 - I. 数组中数字出现的次数
- 位1的个数
- 2 的幂 与 338. 比特位计数
算法-哈希表(Java实现)
- 两数之和
- 三数之和
方法一:使用哈希表存储第三个数字,然后使用两数之和的思路
方法二:夹逼法 - 四数之和
- 有效的字母异位词
- 剑指 Offer II 004. 只出现一次的数字
算法-递归和分治(Java实现)
- 50 实现 pow(x, n) ,即计算 x 的 n 次幂函数
思路一:快速幂 + 递归
思路二:快速幂 + 迭代 + 位运算 - 169 求众数题目(剑指 Offer 39. 数组中出现次数超过一半的数字、169. 多数元素)
算法-树&二叉树&二叉搜索树(Java实现)
- 树的几种遍历方式
- 验证二叉搜索树
思路:中序遍历如果是得到一个排序好的数组的话,那么肯定就是二叉搜索树
思路:递归,如果该二叉树的左子树不为空,则左子树上所有节点的值
均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值
均大于它的根节点的值;它的左右子树也为二叉搜索树。 - 最近公共祖先
- 求最小深度和最大深度
思路:DFS 搜索
思路:BFS 搜索 - 652.寻找重复的子树
- 剑指 Offer II 050. 向下的路径节点之和
- 二叉树的右视图
- 剑指 Offer 28. 对称的二叉树
- 剑指 Offer 27. 二叉树的镜像
- 1448.统计二叉树中好节点的数目
- 剑指 Offer 26. 树的子结构
- 450.删除二叉搜索树中的节点
- 对称二叉树:实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
算法-栈和队列(Java实现)
单调栈类型问题
- 剑指 Offer 59 - II. 队列的最大值(单调队列类问题)
- 739.每日温度
其他
栈和队列以及优先队列
- 栈的压入、弹出序列
- 返回滑动窗口中的最大值
解法一:
解法二: - 返回数据流中的第K大元素
- 20.有效的括号
- 剑指 Offer II 037. 小行星碰撞