程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python算法:1.两数之和

hfteth 2025-05-26 16:01:25 技术文章 4 ℃

在算法的世界里,“两数之和”是一道经典的题目,它可以帮助我们锻炼编程思维和解决实际问题的能力。本文将详细介绍如何使用Python来解决这个问题。

问题分析

给定一个整数数组 nums 和一个整数目标值 target,我们需要在数组中找出两个数,使它们的和等于目标值 target,然后返回这两个数在数组中的下标。需要注意的是,每种输入只会对应一个答案,并且不能使用两次相同的元素,返回答案的顺序可以任意。

解决方案

我们可以使用哈希表(在Python中用字典实现)来解决这个问题。具体步骤如下:

  1. 遍历数组 nums,对于每个元素 num,计算它与目标值 target 的差值 complement。
  2. 检查差值 complement 是否已经在哈希表中。 如果在哈希表中,说明我们已经找到了两个数,它们的和等于目标值 target,返回这两个数的下标。 如果不在哈希表中,将当前元素 num 及其下标存入哈希表中。

代码实现

def twoSum(nums, target):
    # 创建一个空字典,用于存储元素及其下标
    num_dict = {}
    # 遍历数组 nums
    for i, num in enumerate(nums):
        # 计算当前元素与目标值的差值
        complement = target - num
        # 检查差值是否已经在字典中
        if complement in num_dict:
            # 如果在字典中,返回差值的下标和当前元素的下标
            return [num_dict[complement], i]
        # 将当前元素及其下标存入字典中
        num_dict[num] = i
    # 如果没有找到符合条件的两个数,返回空列表
    return []


# 示例测试
nums1 = [2, 7, 11, 15]
target1 = 9
print(twoSum(nums1, target1))  # 输出: [0, 1]

nums2 = [3, 2, 4]
target2 = 6
print(twoSum(nums2, target2))  # 输出: [1, 2]

nums3 = [3, 3]
target3 = 6
print(twoSum(nums3, target3))  # 输出: [0, 1]

复杂度分析

  • 时间复杂度:,其中 是数组的长度。我们只需要遍历数组一次,对于每个元素的查找操作在哈希表中只需要 的时间。
  • 空间复杂度:,主要是哈希表的空间开销,最坏情况下需要存储数组中的所有元素。

通过使用哈希表,我们可以高效地解决“两数之和”问题。希望本文能帮助你理解如何使用Python解决这类问题。

Tags:

最近发表
标签列表