【python】两数之和 python实现(详细讲解)

简介: 【python】两数之和 python实现(详细讲解)


👉博__主👈:米码收割机

👉技__能👈:C++/Python语言

👉公众号👈:测试开发自动化【获取源码+商业合作】

👉荣__誉👈:阿里云博客专家博主、51CTO技术博主

👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。



一、问题描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] ==9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]


二、代码实现

2.1 暴力枚举法

def add_nums(nums, target):
    n = len(nums)
    for i in range(n):
        for j in range(n):
            if i != j and nums[i] + nums[j] == target:
                return [i, j]

代码分析:

这段代码的函数 add_nums(nums, target) 的目标是找到数组 nums 中和为目标值 target 的两个整数,并返回它们的下标。代码通过嵌套的两层循环遍历数组中的所有可能组合,找到符合条件的两个数,然后返回它们的下标。具体的实现思路如下:

  1. 获取数组 nums 的长度 n
  2. 使用两层嵌套的循环遍历数组的所有可能组合。外层循环变量 i 从 0 到 n-1,内层循环变量 j 也从 0 到 n-1,这样会遍历所有可能的组合,包括相同下标的元素的组合。
  3. 在循环过程中,对于每一对不同的下标 ij,判断 nums[i] + nums[j] 是否等于目标值 target
  4. 如果找到符合条件的两个数,则立即返回它们的下标 [i, j]
  5. 如果遍历完所有可能组合仍然没有找到符合条件的两个数,则返回空列表。

这种实现思路的问题在于它使用了两层嵌套循环,时间复杂度较高,为O(n^2),其中n为数组的长度。在数组规模较大时,这种解决方法的效率会明显降低。为了提高效率,我们可以采用哈希表的方法,使用一次遍历即可找到符合条件的两个数,时间复杂度降为O(n)。


2.2 哈希表(字典)

def two_sum(nums, target):
    # 创建一个空字典用于记录遍历过的元素及其下标
    num_map = {}
    # 遍历数组
    for i, num in enumerate(nums):
        # 计算目标值和当前元素的差值
        complement = target - num
        # 判断差值是否在字典中
        if complement in num_map:
            # 如果在字典中,则返回对应的两个元素下标
            return [num_map[complement], i]
        # 将当前元素及其下标添加到字典中
        num_map[num] = i
    # 如果没有找到符合条件的两个数,则返回空列表
    return []

代码分析:

  1. 遍历给定的整数数组nums,对每个元素进行以下操作:
  • 计算目标值 target 减去当前元素的差值(complement = target - nums[i])。
  • 检查字典 num_map 中是否存在这个差值 complement,如果存在,说明找到了符合条件的两个数,直接返回它们的下标即可。
  1. 在遍历过程中,将当前元素和它的下标添加到字典 num_map 中,用于记录遍历过的元素及其下标。
  2. 如果遍历完成后还没有找到符合条件的两个数,则返回空列表。

这种实现思路的关键在于使用字典 num_map 来记录遍历过的元素及其下标,通过字典的查询操作来判断是否找到目标元素。通过这种方法,可以在一次遍历中找到符合条件的两个数,并且时间复杂度为O(n),空间复杂度为O(n),效率较高。


相关文章
|
6月前
|
存储 算法 Python
python 算法 两数之和 的多种解法
python 算法 两数之和 的多种解法
|
5月前
|
存储 算法 Java
【经典算法】LeetCode1:两数之和(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode1:两数之和(Java/C/Python3实现含注释说明,Easy)
30 1
|
5月前
|
存储 SQL 数据挖掘
LeetCode 第一题:两数之和 【1/1000 python】
LeetCode 第一题:两数之和 【1/1000 python】
|
存储 算法 索引
Python OJ题典例:两数之和
本文介绍了解决两数之和问题的思路和方法。相信阅读后将对两数之和问题有更深入的理解。
123 0
|
算法 Python
Python每日一练(20230502) 围绕区域、两数之和、二叉树展开
Python每日一练(20230502) 围绕区域、两数之和、二叉树展开
84 0
|
Python
LeeCode-两数之和(python)
LeeCode-两数之和(python)
109 0
|
C++ Python
LeetCode 1.两数之和【力扣——C/C++/Python三种编程语言题解】
LeetCode 1.两数之和【力扣——C/C++/Python三种编程语言题解】
111 0
|
算法 索引 Python
Leetcode刷题指南之Python求两数之和【多种思路详解】,判断是否为回文数【将整数转为字符串】【不转为字符串】
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
447 1
Leetcode刷题指南之Python求两数之和【多种思路详解】,判断是否为回文数【将整数转为字符串】【不转为字符串】
|
存储 算法 Java
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
|
算法 Python
《画解算法》1.两数之和【python实现】
《画解算法》1.两数之和【python实现】
《画解算法》1.两数之和【python实现】