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

news2024/12/23 8:04:58

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


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


目录

  • 两数之和 python实现(详细讲解)
  • 一、问题描述
  • 二、代码实现
    • 2.1 暴力枚举法
    • 2.2 哈希表(字典)


一、问题描述

给定一个整数数组 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,如果存在,说明找到了符合条件的两个数,直接返回它们的下标即可。
  2. 在遍历过程中,将当前元素和它的下标添加到字典 num_map 中,用于记录遍历过的元素及其下标。

  3. 如果遍历完成后还没有找到符合条件的两个数,则返回空列表。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/827987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用gdb打印寄存器和地址的值

目录 一、文件介绍:1、源码2、目标文件test13、使用dynamorio工具生成的注释文件(后面简称它注释文件吧) 二、使用gdb调试目标文件1、设置断点2、设置汇编格式为intel3、打开tui界面(汇编c语言)4、run5、查看当前指令5…

tomcat8的安装与服务启动脚本的配置并部署jpress应用

目录 一.了解tomcat8 二.下载安装包 三.安装jdk与tomcat 1.安装jdk 2.安装tomcat (1)解压安装包并创建软链接 (2)设置启动用户并更改权限 (3)编写系统服务文件 (4)重新加载文件…

【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation 链接:Looking to listen at the cocktail party: a speaker-in…

数据采集的方法有哪些?

近年来,国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时,页面总会跳出我们想要搜索的相关产品或关联事物。大数据,似乎总是能够“算”出我们“心中所想”。那么,大…

键入网址到网页显示,期间发生了什么

HTTP 浏览器做的第一步工作是解析URL 首先浏览器做的第一步工作就是要对URL进行解析,从而生成发送给 web 服务器的请求信息。 所以图中长长的URL实际上是请求服务器里的文件资源。 如果图中的蓝色部分URL元素省略了,那应该请求哪个文件呢? 当…

arcgis--连接到数据库失败--外部数据库驱动程序(1)

问题描述: 在加载Excel表格时出现以下问题,无法加载进来。 经过百般尝试,终于找到解决方法。 解决方案: 在微软官网下载accessDataEngine程序,并按照相关位数(32位或64位)安装,具…

FastAPI(七)应用配置

目录 一、在apps下新建文件夹config 二、新建配置文件app_conf.py 一、在apps下新建文件夹config 二、新建配置文件app_conf.py from functools import lru_cachefrom pydantic.v1 import BaseSettingsclass AppConfig(BaseSettings):app_name: str "Windows10 插件&qu…

git上传代码

gitee 1.生成密钥 输入ssh-keygen -t rsa 不断回车 2.查看密钥 3.设置里上传密钥 4.在git bash里输入ssh -T gitgitee.com

Boost开发指南-3.11pool_alloc

pool_alloc pool_alloc提供了两个可以用于标准容器模板参数的内存分配器,分别是pool_alloc和fast_pool_allocator,它们的行为与之前的内存池类有一点不同——当内存分配失败时会抛出异常std::bad_alloc。它们位于名字空间boost,需要包含头文…

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付,后端返回一串form表单,前端如何拿到支付串并且调用支付 1.调取接口拿到…

[Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

目录 7、 Jenkins 集成 SonarQubeJenkins 中安装 SonarScanner下载移动修改配置文件 8、Jenkins配置SonarQube安装插件添加SonarQube添加 SonarScanner 9、Jenkins集成目标服务器 7、 Jenkins 集成 SonarQube Jenkins 中安装 SonarScanner SonarScanner 是一种代码扫描工具&am…

维视智造人工智能产学研用交流会现场精彩回顾

2023年7月28日,维视智造人工智能产学研用交流会在维视智造西安公司成功举办,众多院校专家教授、企业代表齐聚一堂,共同交流探讨行业趋势,共享人才培养经验。 从2015年的《中国制造2025》,到今年的《新一代人工智能发展…

基于方向编码的模板匹配算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ........................................................................... %选择移动个…

C++库函数——String类的模拟实现

目录 ①String类的主体 ②String类的具体实现 1.构造函数、拷贝构造函数、赋值运算符、析构函数 ⑴构造函数 ⑵拷贝构造函数 ⑶赋值运算符 ⑷析构函数 2.迭代器(范围for的实现原理) 3.修改:push_back, apppend, , clear, swap, c_str ⑴push_b…

【BASH】回顾与知识点梳理(七)

【BASH】回顾与知识点梳理 七 七.前六章知识点总结及练习7.1 总结7.2 练习 七.前六章知识点总结及练习 7.1 总结 由于核心在内存中是受保护的区块,因此我们必须要透过『 Shell 』将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的…

【Spring】深究SpringBoot自动装配原理

文章目录 前言1、main入口2、SpringBootApplication3、EnableAutoConfiguration4、AutoConfigurationImportSelector4.1、selectImports()4.2、getAutoConfigurationEntry()4.3、getCandidateConfigurations()4.4、loadFactoryNames() 5、META-INF/spring.factories6、总结 前言…

以beam search为例,详解transformers中generate方法(下)

以beam search为例,详解transformers中generate方法(下) 1. beam search原理回顾2. 代码流程概览3. BeamSearchScorer4. BeamHypotheses5. beam_search过程5.1 beam score初始化5.2 准备输入5.3 前向forward5.4 计算下一个step每个token的得分…

网络安全知识点整理(作业2)

目录 一、js函数声明->function 第一种 第二种 第三种 二、this关键字 this使用场合 1.全局环境 2.构造函数 3.对象的方法 避免多层this 三、js的同步与异步 定时器 setTimeout和setInterval 同步与异步的例子 四、宏任务与微任务 分辨宏任务与微任务 一、js…

深度学习——划分自定义数据集

深度学习——划分自定义数据集 以人脸表情数据集raf_db为例,初始目录如下: 需要经过处理后返回 train_images, train_label, val_images, val_label 定义 read_split_data(root: str, val_rate: float 0.2) 方法来解决,代码如下&#xff1a…

【C++】开源:matplotlib-cpp静态图表库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…