1. LeetCode刷题入门:从第28届Day01开始
刷算法题这件事,就像健身一样需要持续坚持。最近LeetCode官方推出了第28届每日一题挑战,我决定从Day01开始完整跟进这个系列。作为有五年刷题经验的"老油条",我想分享如何高效利用这类每日挑战活动,特别是针对刚开始刷题的新手朋友们。
这个Day01的题目虽然看似简单,但包含了几个经典算法思维模式。我建议无论基础如何,都值得认真对待每一道题,因为很多面试中的难题往往就是由这些基础元素组合而成的。接下来我会拆解题目解法,同时分享我的刷题工作流,包括如何做笔记、整理错题本、以及利用哪些工具提升效率。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目分析与解题思路
2.1 题目内容还原
第28届Day01的题目是经典的"两数之和"变种。给定一个整数数组nums和一个目标值target,要求在数组中找到两个数,使它们的和与target的绝对差最小,并返回这两个数的索引。这与传统的两数之和不同,不是找确切相等而是找最接近的值。
示例输入:
nums = [3, 7, 12, 18], target = 10
预期输出:
[0, 1] // 因为3+7=10,正好匹配
2.2 解题思路拆解
面对这类问题,我通常会采用"暴力法→优化思路→最终方案"的三步思考法:
-
暴力枚举:双重循环检查所有可能的数对组合,计算它们和与target的差值,记录最小差值对应的索引。时间复杂度O(n²),适用于小数据量。
-
排序+双指针:先对数组排序,然后用首尾指针向中间移动。计算当前两数和与target的差值,根据差值大小决定移动哪个指针。时间复杂度O(nlogn)来自排序。
-
哈希表优化:类似经典两数之和解法,但需要额外处理差值比较。建立值到索引的映射,对于每个元素nums[i],检查target-nums[i]是否存在于哈希表中。
经过实际测试,对于LeetCode的测试用例规模,第二种方法在编码复杂度和性能之间取得了最好平衡。下面重点讲解这种实现。
3. 代码实现与调试过程
3.1 排序与双指针解法
python复制def twoSumClosest(nums, target):
nums_sorted = sorted([(num, i) for i, num in enu
