一、项目背景
为了提升算法思维和代码实现能力,我系统整理了多道经典算法题目,涵盖数组、哈希表、字符串、双指针等基础题型。每道题均提供完整代码 + 详细注释 + 解题思路 + 复杂度分析 + 自测用例,可用于作业参考、面试准备或算法入门学习。
二、具体内容(目前已整理5题,持续更新)
序号 题目 核心知识点
1 两数之和 哈希表(unordered_map)、查找优化
2 存在重复元素 排序 / set 去重
3 有效的字母异位词 字符计数 / sort 比较
4 最大子数组和 动态规划 / 贪心
5 合并两个有序链表 链表遍历 / 虚拟头结点
三、技术亮点
注释详尽:每道题开头用注释写明题目描述、思路、时间复杂度、空间复杂度。
代码规范:变量命名清晰,关键步骤有注释,便于阅读和修改。
测试友好:每个程序内置 main() 函数及多组测试用例,可一键运行验证。
独立文件:每题单独一个 .cpp 文件,命名直观(如 001_Two_Sum.cpp)。
四、我的职责
独立选题、编写所有题解与注释。
统一代码风格,确保可读性。
编写总 README.md,提供题目索引和编译运行指南。
五、作品展示(示例预览)
cpp
// 001_Two_Sum.cpp
// 题目:给定数组nums和目标值target,返回两数之和的下标。
// 思路:一次遍历,用哈希表记录已遍历元素的值和下标。
// 时间复杂度O(n),空间复杂度O(n)
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for (int i = 0; i < nums.size(); ++i) {
int complement = target - nums[i];
if (mp.count(complement)) return {mp[complement], i};
mp[nums[i]] = i;
}
return {};
}