# codeTop100 **Repository Path**: gu1973750230/codeTop100 ## Basic Information - **Project Name**: codeTop100 - **Description**: codeTop100 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-20 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CodeTop100 - LeetCode高频面试题Java实现 [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://www.oracle.com/java/) [![Maven](https://img.shields.io/badge/Maven-3.6+-blue.svg)](https://maven.apache.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) ## 📖 项目简介 本项目收录了**CodeTop前100道LeetCode高频面试题**的Java实现,按照CodeTop的热度排序进行整理。每道题目都包含: - 🎯 **完整的Java解法实现** - 💡 **详细的算法思路分析** - 🧪 **全面的测试用例覆盖** - 📊 **时间空间复杂度分析** - 🔍 **多种解法对比(如适用)** ## 🏗️ 项目结构 ``` codeTop100/ ├── src/main/java/com/yanceysong/ │ ├── codetop/ # 主要题目实现 │ │ ├── s1_s10/ # 第1-10题(热度最高) │ │ ├── s11_s20/ # 第11-20题 │ │ ├── s21_s30/ # 第21-30题 │ │ ├── s31_s40/ # 第31-40题 │ │ ├── s41_s50/ # 第41-50题 │ │ ├── s51_s60/ # 第51-60题 │ │ ├── s61_s70/ # 第61-70题 │ │ ├── s81_s90/ # 第81-90题 │ │ └── s91_s100/ # 第91-100题 │ ├── common/ # 公共数据结构 │ │ ├── ListNode.java # 链表节点 │ │ └── TreeNode.java # 二叉树节点 │ └── other/ # 其他辅助类 ├── pom.xml # Maven配置文件 └── README.md # 项目说明文档 ``` ## 🎯 题目列表 ### 🔥 Top 1-10(超高频) | 排名 | 题目 | 难度 | 类型 | 实现状态 | |------|------|------|------|----------| | 1 | [146. LRU缓存](src/main/java/com/yanceysong/codetop/s1_s10/S1_Mid_146_LRU缓存.java) | 🟡 中等 | 设计 | ✅ | | 2 | [3. 无重复字符的最长子串](src/main/java/com/yanceysong/codetop/s1_s10/S2_Mid_3_无重复最长子串.java) | 🟡 中等 | 滑动窗口 | ✅ | | 3 | [206. 反转链表](src/main/java/com/yanceysong/codetop/s1_s10/S3_Easy_206_反转链表.java) | 🟢 简单 | 链表 | ✅ | | 4 | [25. K个一组翻转链表](src/main/java/com/yanceysong/codetop/s1_s10/S4_Hard_25_K个一组翻转链表.java) | 🔴 困难 | 链表 | ✅ | | 5 | [215. 数组中的第K个最大元素](src/main/java/com/yanceysong/codetop/s1_s10/S5_Mid_215_数组中的第K个最大元素.java) | 🟡 中等 | 堆/快选 | ✅ | | 6 | [15. 三数之和](src/main/java/com/yanceysong/codetop/s1_s10/S6_Mid_15_三数之和.java) | 🟡 中等 | 双指针 | ✅ | | 7 | [21. 合并两个有序链表](src/main/java/com/yanceysong/codetop/s1_s10/S7_Easy_21_合并两个有序链表.java) | 🟢 简单 | 链表 | ✅ | | 8 | [912. 排序数组](src/main/java/com/yanceysong/codetop/s1_s10/S8_Mid_912_数组排序.java) | 🟡 中等 | 排序 | ✅ | | 9 | [33. 搜索旋转排序数组](src/main/java/com/yanceysong/codetop/s1_s10/S9_Mid_33_搜索旋转排序数组.java) | 🟡 中等 | 二分查找 | ✅ | | 10 | [92. 反转链表II](src/main/java/com/yanceysong/codetop/s1_s10/S10_Mid_92_反转链表II.java) | 🟡 中等 | 链表 | ✅ | ### 🔥 Top 11-20(高频) | 排名 | 题目 | 难度 | 类型 | 实现状态 | |------|------|------|------|----------| | 11 | [102. 二叉树的层序遍历](src/main/java/com/yanceysong/codetop/s11_s20/s11_Mid_102_二叉树的层次遍历.java) | 🟡 中等 | 树/BFS | ✅ | | 12 | [23. 合并K个升序链表](src/main/java/com/yanceysong/codetop/s11_s20/s12_Hard_23_合并K个升序链表.java) | 🔴 困难 | 链表/堆 | ✅ | | 13 | [5. 最长回文子串](src/main/java/com/yanceysong/codetop/s11_s20/s13_Mid_5_最长回文子串.java) | 🟡 中等 | 动态规划 | ✅ | | 14 | [143. 重排链表](src/main/java/com/yanceysong/codetop/s11_s20/s14_Mid_143_重排链表.java) | 🟡 中等 | 链表 | ✅ | | 15-20 | ... | ... | ... | 🚧 开发中 | ## 🚀 快速开始 ### 环境要求 - **Java**: 17+ - **Maven**: 3.6+ - **IDE**: IntelliJ IDEA / Eclipse(推荐) ### 克隆项目 ```bash git clone https://github.com/yanceysong/codeTop100.git cd codeTop100 ``` ### 编译运行 ```bash # 编译项目 mvn clean compile # 运行特定题目的测试 mvn exec:java -Dexec.mainClass="com.yanceysong.codetop.s1_s10.S2_Mid_146_LRU缓存" ``` ### IDE中运行 1. 导入Maven项目到IDE 2. 找到对应题目的Java文件 3. 运行main方法查看测试结果 ## 💡 代码特色 ### 1. 统一的代码结构 每个题目文件都包含: ```java public class S1_Mid_146_LRU缓存 { /** * 题目描述和要求 * 示例输入输出 * 约束条件 */ // 主要解法实现 public ReturnType solutionMethod(Parameters params) { // 详细的算法实现 } // 完整的测试用例 public static void main(String[] args) { // 多种测试场景 } } ``` ### 2. 详细的注释说明 - **算法思路**: 解释解题的核心思想 - **步骤分解**: 详细的实现步骤 - **复杂度分析**: 时间和空间复杂度 - **边界处理**: 特殊情况的处理方式 ### 3. 全面的测试覆盖 - ✅ **基本功能测试**: 验证核心算法正确性 - ✅ **边界情况测试**: 空值、单元素等极端情况 - ✅ **性能测试**: 大数据量下的性能表现 - ✅ **特殊值测试**: 负数、重复值等特殊输入 ## 📚 学习指南 ### 按难度学习 1. **🟢 简单题**: 先掌握基础算法和数据结构 2. **🟡 中等题**: 理解常见算法模式和优化技巧 3. **🔴 困难题**: 挑战复杂算法和综合应用 ### 按类型学习 - **链表**: 206, 21, 25, 92, 143, 23 - **数组**: 215, 15, 912, 33 - **字符串**: 3, 5 - **树**: 102 - **设计**: 146 ### 推荐学习路径 ``` 第一阶段:基础数据结构 ├── 链表操作 (206, 21, 92) ├── 数组处理 (215, 15) └── 字符串算法 (3) 第二阶段:进阶算法 ├── 复杂链表操作 (25, 143, 23) ├── 高级数组算法 (912, 33) └── 动态规划 (5) 第三阶段:系统设计 └── 缓存设计 (146) ``` ## 🔧 核心算法模板 ### 链表反转模板 ```java public ListNode reverseList(ListNode head) { ListNode prev = null, curr = head; while (curr != null) { ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; } return prev; } ``` ### 滑动窗口模板 ```java public int slidingWindow(String s) { Map window = new HashMap<>(); int left = 0, right = 0, result = 0; while (right < s.length()) { // 扩大窗口 char c = s.charAt(right); window.put(c, window.getOrDefault(c, 0) + 1); right++; // 收缩窗口 while (/* 窗口需要收缩的条件 */) { char d = s.charAt(left); window.put(d, window.get(d) - 1); left++; } // 更新结果 result = Math.max(result, right - left); } return result; } ``` ### 二分查找模板 ```java public int binarySearch(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } ``` ## 📊 算法复杂度总结 | 题目 | 时间复杂度 | 空间复杂度 | 核心算法 | |------|------------|------------|----------| | LRU缓存 | O(1) | O(capacity) | 哈希表+双向链表 | | 无重复最长子串 | O(n) | O(min(m,n)) | 滑动窗口 | | 反转链表 | O(n) | O(1) | 双指针迭代 | | K个一组翻转链表 | O(n) | O(1) | 递归/迭代 | | 第K个最大元素 | O(n) | O(1) | 快速选择 | | 三数之和 | O(n²) | O(1) | 排序+双指针 | | 合并有序链表 | O(m+n) | O(1) | 双指针 | | 排序数组 | O(nlogn) | O(logn) | 快速排序 | | 搜索旋转数组 | O(logn) | O(1) | 二分查找 | | 反转链表II | O(n) | O(1) | 一次遍历 | ## 🎯 面试重点 ### 高频考点 1. **链表操作** (40%): 反转、合并、重排 2. **数组算法** (25%): 查找、排序、双指针 3. **字符串处理** (20%): 滑动窗口、动态规划 4. **系统设计** (15%): 缓存、数据结构设计 ### 面试技巧 #### 1. 解题步骤 ``` 1. 理解题意 → 确认输入输出格式 2. 分析约束 → 确定时间空间复杂度要求 3. 设计算法 → 选择合适的数据结构和算法 4. 编码实现 → 注意边界条件处理 5. 测试验证 → 用例覆盖各种情况 ``` #### 2. 常见陷阱 - **空指针**: 链表操作前检查null - **数组越界**: 注意索引范围 - **整数溢出**: 大数运算使用long - **重复元素**: 去重逻辑要清晰 #### 3. 优化思路 - **时间换空间**: 使用哈希表加速查找 - **空间换时间**: 预处理减少重复计算 - **算法优化**: 选择更高效的算法 - **常数优化**: 减少不必要的操作 ## 🤝 贡献指南 ### 如何贡献 1. **Fork** 本仓库 2. **创建** 特性分支: `git checkout -b feature/new-solution` 3. **提交** 更改: `git commit -am 'Add new solution'` 4. **推送** 分支: `git push origin feature/new-solution` 5. **提交** Pull Request ### 代码规范 - 使用统一的命名规范 - 添加详细的注释说明 - 包含完整的测试用例 - 遵循Java编码规范 ### 题目添加规范 ```java /** * @ClassName S{排名}_{难度}_{题号}_{题目名称} * @Description {题目描述} * @date {创建日期} * @Author yanceysong * @Version 1.0 */ ``` ## 📈 项目进度 - [x] **第1-10题**: 已完成 ✅ - [x] **第11-20题**: 部分完成 🚧 - [ ] **第21-30题**: 规划中 📋 - [ ] **第31-40题**: 规划中 📋 - [ ] **第41-50题**: 规划中 📋 - [ ] **第51-60题**: 规划中 📋 - [ ] **第61-70题**: 规划中 📋 - [ ] **第71-80题**: 规划中 📋 - [ ] **第81-90题**: 规划中 📋 - [ ] **第91-100题**: 规划中 📋 ## 📞 联系方式 - **作者**: yanceysong - **邮箱**: [yanceysong@foxmail.com] - **GitHub**: [https://github.com/yanceysong] ## 📄 许可证 本项目采用 [MIT License](LICENSE) 许可证。 ## 🙏 致谢 - 感谢 [LeetCode](https://leetcode.com/) 提供优质的算法题目 - 感谢 [CodeTop](https://codetop.cc/) 提供面试频率统计 - 感谢所有为本项目贡献代码的开发者 --- ⭐ **如果这个项目对你有帮助,请给个Star支持一下!** ⭐