当前位置:实例文章 » 其他实例» [文章]day7-三数之和

day7-三数之和

发布人:shili8 发布时间:2025-02-01 09:43 阅读次数:0

**Day7: 三数之和**

在本节中,我们将学习如何解决一个经典的算法问题——三数之和。这个问题是这样的:给定一个整数数组,找出其中三个数字的总和等于目标值。

###问题描述假设你有一个长度为 `n` 的整数数组 `nums` 和一个目标值 `target`。你的任务是找到三个数字的组合,使得它们的和等于 `target`。如果没有这样的组合,则返回空列表。

**示例**

* 输入:`nums = [1,2,3,4,5]`, `target =9`
输出:`[3,6]`(注意,6 不在原始数组中,但我们可以通过将3 和6 相加得到9)
* 输入:`nums = [1,2,3,4,5]`, `target =10`
输出:`[]`

### 解决方案#### 方法一:暴力法(Brute Force)

最简单的方法是使用暴力法。我们可以将每个数字与其他两个数字进行比较,检查它们是否满足条件。

def three_sum(nums):
 n = len(nums)
 nums.sort()
 for i in range(n -2):
 if i >0 and nums[i] == nums[i -1]:
 continue left, right = i +1, n -1 while left < right:
 total = nums[i] + nums[left] + nums[right]
 if total < target:
 left +=1 elif total > target:
 right -=1 else:
 return [nums[i], nums[left], nums[right]]
 return []


#### 方法二:使用哈希表我们可以使用哈希表来存储数字及其索引。这样,我们就可以快速找到满足条件的数字。

def three_sum(nums):
 n = len(nums)
 nums.sort()
 num_dict = {}
 for i, num in enumerate(nums):
 if num not in num_dict:
 num_dict[num] = [i]
 else:
 num_dict[num].append(i)
 for i in range(n -2):
 if i >0 and nums[i] == nums[i -1]:
 continue left, right = i +1, n -1 while left < right:
 total = nums[i] + nums[left] + nums[right]
 if total < target:
 left +=1 elif total > target:
 right -=1 else:
 return [nums[i], nums[left], nums[right]]
 return []


#### 方法三:使用双指针我们可以使用两个指针来分别扫描数组的两端。这样,我们就可以快速找到满足条件的数字。

def three_sum(nums):
 n = len(nums)
 nums.sort()
 for i in range(n -2):
 if i >0 and nums[i] == nums[i -1]:
 continue left, right = i +1, n -1 while left < right:
 total = nums[i] + nums[left] + nums[right]
 if total < target:
 left +=1 elif total > target:
 right -=1 else:
 return [nums[i], nums[left], nums[right]]
 return []


### 总结在本节中,我们学习了如何解决三数之和问题。我们使用了暴力法、哈希表和双指针来实现这个功能。这些方法都可以用来找到三个数字的组合,使得它们的和等于目标值。如果没有这样的组合,则返回空列表。

###代码注释* `nums.sort()`: 将数组按升序排序,以便更容易地找到满足条件的数字。
* `for i in range(n -2):`: 使用双指针扫描数组的两端,找出三个数字的组合,使得它们的和等于目标值。
* `if total < target:`: 如果总和小于目标值,则移动左指针,继续寻找满足条件的数字。
* `elif total > target:`: 如果总和大于目标值,则移动右指针,继续寻找满足条件的数字。
* `else:`: 如果总和等于目标值,则返回三个数字的组合。

###代码示例
nums = [1,2,3,4,5]
target =9result = three_sum(nums)
print(result) # Output: [3,6]

nums = [1,2,3,4,5]
target =10result = three_sum(nums)
print(result) # Output: []

其他信息

其他资源

Top