1. 算法入门:两数之和与存在重复元素问题解析
刚接触算法的新手往往会被看似简单的问题难住,今天我们就来拆解两个经典的LeetCode入门题——"两数之和"和"存在重复元素"。这两个问题看似基础,却包含了算法设计中最重要的思想:如何用合适的数据结构降低时间复杂度。我在面试候选人时发现,能清晰解释这两种解法差异的开发者,往往对算法有更深刻的理解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 两数之和问题深度解析
2.1 问题描述与暴力解法
给定一个整数数组nums和一个目标值target,要求在数组中找出和为目标值的那两个整数,并返回它们的数组下标。例如:
code复制输入:nums = [2,7,11,15], target = 9
输出:[0,1]
最直观的解法是双重循环暴力搜索:
python复制def twoSum(nums, target):
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
return []
这种解法时间复杂度O(n²),空间复杂度O(1)。当数组长度超过10⁴时,这种解法在LeetCode上会超时。
注意:面试时即使先提出暴力解法也要明确说明其效率问题,这展示了你对复杂度的敏感度
2.2 哈希表优化解法
利用哈希表(Python中的字典)可以将时间复杂度降到O(n):
python复制def twoSum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
return []
这个解法的精妙之处在于:
- 只遍历一次数组,边遍历边构建哈希表
- 存储的是"值->索引"的映射
- 每次先检查当
