【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),效率较高。


相关文章
|
4天前
|
存储 算法 Python
python 算法 两数之和 的多种解法
python 算法 两数之和 的多种解法
|
10月前
|
存储 算法 索引
Python OJ题典例:两数之和
本文介绍了解决两数之和问题的思路和方法。相信阅读后将对两数之和问题有更深入的理解。
83 0
|
12月前
|
算法 Python
Python每日一练(20230502) 围绕区域、两数之和、二叉树展开
Python每日一练(20230502) 围绕区域、两数之和、二叉树展开
65 0
|
存储 算法 Java
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
【刷题之路 | Java & Python】两数之和(暴力枚举&哈希表)
|
算法 索引 Python
Leetcode刷题指南之Python求两数之和【多种思路详解】,判断是否为回文数【将整数转为字符串】【不转为字符串】
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
371 1
Leetcode刷题指南之Python求两数之和【多种思路详解】,判断是否为回文数【将整数转为字符串】【不转为字符串】
|
Python
PYTHON实战两数之和
1. 两数之和 难度:简单 收藏 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
157 0
PYTHON实战两数之和
|
1天前
|
Python
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
10个python入门小游戏,零基础打通关,就能掌握编程基础_python编写的入门简单小游戏
|
3天前
|
网络协议 Unix Python
Python编程-----网络通信
Python编程-----网络通信
8 1
|
4天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
【5月更文挑战第9天】`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
32 5
|
4天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
14 0