Java模拟算法题目练习

以下是一份针对 Java 初/中级开发者算法模拟练习清单,重点覆盖最常考、最有代表性的题型:

  • 数组
  • 链表
  • 双指针 / 快慢指针
  • 滑动窗口
  • 二分查找

每类给出 3–5 道经典 LeetCode 题目(难度递增),附带核心思路提示 + Java 代码框架(不直接给完整解,留给你自己写 + debug 的空间)。

建议练习顺序:先暴力 → 再优化 → 最后写出 O(n) / O(log n) 解

1. 数组基础 + 模拟

序号题目名称 & 链接难度核心考察点提示 / Java 框架思路
126. 删除有序数组中的重复项简单原地修改 + 双指针快慢指针,慢指针记录有效位置
227. 移除元素简单原地修改 + 覆盖法快慢指针 / 交换法
3283. 移动零简单双指针 + 覆盖类似 27,先把非零元素前移,最后补 0
4189. 轮转数组中等数组翻转 / 环状替换三次反转法 或 使用额外空间
548. 旋转图像中等矩阵原地旋转先转置 + 每行翻转

练习目标:熟练掌握原地修改数组、不使用额外空间的技巧。

2. 链表基础 + 模拟

序号题目名称 & 链接难度核心考察点提示 / Java 框架思路
1206. 反转链表简单迭代 / 递归迭代三指针(prev、cur、next)最稳
221. 合并两个有序链表简单哑节点 + 归并创建 dummy 头节点,避免头指针丢失
319. 删除链表的倒数第 N 个结点中等快慢指针 / 两次遍历快指针先走 n 步,再一起走 → 快到尾,慢刚好在要删的前一个
4141. 环形链表简单快慢指针快指针走两步,慢指针走一步,相遇即有环
5142. 环形链表 II中等快慢指针 + 数学推导相遇后慢指针回 head,快慢都一步一步走,再相遇即入口

练习目标:熟练使用哑节点、快慢指针、虚拟头节点,避免边界情况(空链表、只有一个节点)。

3. 双指针(左右指针 + 快慢指针)

序号题目名称 & 链接难度核心考察点提示 / Java 框架思路
1167. 两数之和 II – 输入有序数组中等有序数组 + 双指针左右指针相向移动,sum > target → 右指针左移
215. 三数之和中等排序 + 双指针 + 去重固定一个数 + 左右指针找另外两个(注意去重)
311. 盛最多水的容器中等左右指针 + 贪心每次移动短板(面积只可能变大或不变)
442. 接雨水困难双指针 / 单调栈左右指针 + 记录左右最大高度(经典双指针写法)
575. 颜色分类中等三指针(荷兰国旗)p0、p1、p2 分别维护 0、1、2 的边界

练习目标:掌握“相向双指针”和“快慢指针”的不同使用场景。

4. 滑动窗口(固定 / 可变长度)

序号题目名称 & 链接难度核心考察点提示 / Java 框架思路
1209. 长度最小的子数组中等可变滑动窗口右指针扩张,左指针收缩(当窗口和 >= target 时收缩)
23. 无重复字符的最长子串中等滑动窗口 + HashSet/Map右指针扩张,遇到重复 → 左指针跳到重复字符下一位
376. 最小覆盖子串困难滑动窗口 + 计数器need / window 两个哈希表 + valid 计数器
4567. 字符串的排列中等固定长度滑动窗口窗口大小固定为 s1.length(),计数器相等即满足
5438. 找到字符串中所有字母异位词中等固定长度 + 计数器同 567,但收集所有起点

练习目标:熟练写出滑动窗口模板(右指针扩张 → while 收缩左指针 → 更新答案)。

5. 二分查找(及其变种)

序号题目名称 & 链接难度核心考察点提示 / Java 框架思路
1704. 二分查找简单标准二分while left <= right,mid = left + (right-left)/2
234. 在排序数组中查找元素的第一个和最后一个位置中等二分找边界两次二分:找左边界(>= target)、找右边界(> target)
333. 搜索旋转排序数组中等有序旋转数组二分判断 mid 在哪一段有序区间
4153. 寻找旋转排序数组中的最小值中等最小值二分while left < right,判断 mid 和 right 关系
5875. 爱吃香蕉的珂珂中等二分答案最小速度 1,最大速度 max(piles),二分 mid 速度是否可行

练习目标:掌握左闭右闭 / 左闭右开模板,熟练处理“找左边界 / 右边界 / 最小满足条件”三种变体。

推荐练习节奏(30 天计划建议)

  • 第 1–7 天:数组 + 链表(每天 3–5 题,写暴力 + 优化)
  • 第 8–14 天:双指针 + 滑动窗口(重点练窗口收缩条件)
  • 第 15–21 天:二分查找 + 二分答案(写左右边界模板)
  • 第 22–30 天:混合刷题(Hot 100 中等题 + 剑指 Offer 经典题)

一句话建议

先把上面 20 题 用 Java 手写 2–3 遍(暴力 → 优化 → 最优),再去 LeetCode Hot 100 / 剑指 Offer 刷专题,就能覆盖 80% 以上 Java 后端面试算法题。

有具体想练的题型(比如只练滑动窗口、只练链表)或想看某道题的 Java 参考框架?直接告诉我,我给你更精细的清单或代码模板。加油!

文章已创建 3993

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部