算法题汇总

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实现)

  • 代码实现前缀树
    1. 单词搜索 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实现)

  1. 两数之和
  2. 三数之和
    方法一:使用哈希表存储第三个数字,然后使用两数之和的思路
    方法二:夹逼法
  3. 四数之和
  4. 有效的字母异位词
  5. 剑指 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. 小行星碰撞

所有代码地址:Javastudy/algorithm/src/main/java

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值