返回
强势解析:LeetCode 1. 两数之和,手把手教您轻松搞定!
闲谈
2023-12-18 15:28:13
题目背景:
给定一个包含 n 个整数的数组 nums 和一个整数目标值 target,要求您在该数组中找到两个数字,使得这两个数字之和等于目标值 target。并且返回这两个数字的索引。
思路剖析:
解决两数之和问题的思路主要有两种:暴力搜索和哈希表法。
1. 暴力搜索法:
暴力搜索法是最直观的解法,也是最容易理解的。其基本思想是:对数组中的每个元素逐个进行比较,若发现两个元素之和等于目标值 target,则记录下这两个元素的索引并返回。暴力搜索法的时间复杂度为 O(n^2),其中 n 是数组 nums 的长度。
def twoSum_brute(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 None
2. 哈希表法:
哈希表法是一种更高效的解法。其基本思想是:利用哈希表将数组中的每个元素及其索引存储起来,当需要查找两个元素之和是否等于目标值 target 时,只需在哈希表中查找是否存在与 target - nums[i] 相等的元素即可。如果存在,则表示找到了两个元素,其索引分别为 i 和哈希表中查找到的元素的索引。哈希表法的平均时间复杂度为 O(n),空间复杂度为 O(n)。
def twoSum_hash(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
return None
代码实现:
def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# 暴力搜索法
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
# 哈希表法
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
return None
结语:
两数之和是 LeetCode 上的一道经典问题,也是算法面试中经常考察的题目。掌握两数之和问题的解法和技巧,可以帮助您在算法面试中脱颖而出。同时,两数之和问题也是学习算法和数据结构的一个很好的切入点,通过解决这个问题,您将对算法的基本原理和数据结构的应用有更深入的理解。