Python算法:1.两数之和

liftword3周前 (05-28)技术文章6

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

相关文章

Python算法:4.寻找两个正序数组的中位数

题目:寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log(m+n...

在Python中怎么用二分法插入一个新的数到数组列表

接昨天的把一个数插入到有序的数组、列表中,我们今天使用二分法来,就好比一个队分成2个队,因为有序的么,先比较中间的,得到结果,只要比较一个方向的一半就可以了,这样一来是不是减少一半的时间,节约是运行时...

Python实现【分割数组的最大差值】

n = int(input()) nums = list(map(int, input().split())) total_sum = sum(nums) max_diff = 0 left_sum...

Python实现【找出两个整数数组中同时出现的整数】

from collections import defaultdict import sys def solve(): # 读取输入 arr1 = list(map(int, sys...

Python实现分治算法?

分治算法(Divide and Conquer Algorithm)是一种设计算法的策略,它将一个问题分成多个相似的子问题,递归地解决这些子问题,然后将结果合并以得到原问题的解。典型的分治算法包括归并...

【找出两个整数数组中同时出现的整数】Python实现

from collections import Counter def find_common_elements(arr1, arr2): # 统计数组中每个数字的出现次数 coun...