[ LeetCode ] 题刷刷(Python)-第1题:两数之和

题目描述

给定一个整数数组 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]

解题

1.解法一:暴力破解,两for走天下

思路

遍历寻找当前num后与target - num相等的目标元素,返回当前num的下标和目标元素的下标

算法复杂度

时间复杂度:O(n^2),其中 n 是输入数组 nums 的长度。

代码中存在一个外层循环,其循环次数为 n,内层循环也是遍历从当前外层循环索引 i+1 开始的剩余元素,最坏情况下需要遍历 n-1 次。因此,在整体上,循环会进行 n*(n-1)/2 次比较,简化后仍为 O(n^2)。

空间复杂度:O(1)

因为它只使用了常数个额外空间来存储变量 results 和循环中的临时变量 index 和 j。

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for i in range(len(nums)):results = target - nums[i]for index, j in enumerate(nums[i+1:], start=i+1):if results == j:return [i,index]

2.解法二:哈希表来咯

思路

初始化一个空字典 hashtable。
使用 enumerate 函数遍历 nums 列表,这样可以同时获得元素的值 num 和对应的下标 i。
对于每一个 num,检查 target - num 是否已经在 hashtable 中。如果存在,则说明找到了一对和为目标值的数,返回它们的下标 [hashtable[target - num], i]。
若当前 num 的值不在哈希表中,将其作为键存入哈希表,并将下标 i 作为对应的值。
如果循环结束都没有找到满足条件的数对,则返回一个空列表 [ ]。

算法复杂度

时间复杂度:O(n),其中 n 代表数组 nums 的长度。

该算法主要包含一个遍历数组的操作,即遍历整个输入数组 nums,并对每个元素执行一次查找操作。查找操作在哈希表中进行,由于哈希表的查找、插入操作在平均情况下均具有 O(1) 的时间复杂度,所以整个算法的时间复杂度主要取决于遍历数组的时间。

空间复杂度:O(n),其中n代表数组 nums 的长度。主要为哈希表的开销。

def twoSum(nums, target):hashtable = {}  for i, num in enumerate(nums):complement = target - numif complement in hashtable:return [hashtable[complement], i]hashtable[num] = i  return []

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

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

相关文章

蓝桥杯备考随手记: Java 中常用的集合类

Java中最常用的几个集合类包括ArrayList、LinkedList、HashSet、TreeSet和HashMap。 下面将详细介绍这些集合类及其方法。 ArrayList: 特点:基于数组实现,支持动态增长和随机访问,但插入和删除操作可能较慢。常见用法&#xff1a…

软件测试与康威定律的深层联系

在软件开发的世界中,软件测试是保证产品质量的关键步骤,而康威定律则提供了一个关于系统设计和组织结构如何相互影响的独特视角。本文将深入探讨软件测试的基本概念、重要性以及实施过程,并结合康威定律,分析其对软件测试实践的影…

什么是虚拟DOM(Virtual DOM),以及它在React或其他前端框架中的作用?

虚拟DOM(Virtual DOM)是一种在内存中以JavaScript对象的形式表示的轻量级的DOM副本。它是由React等前端框架使用的一种技术,用于提高页面渲染的性能和效率。 在传统的前端开发中,当页面中的数据发生变化时,通常需要直…

nginx到底是怎么工作的

工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址反向代理服务器接受用户的请求反向代理服务器在本地缓存中查找请求的内容,找到后直接把内容发送给用户如果本地缓存里没有用户所请求的信息内容&#xff0…

【攻防世界】题目名称-文件包含

看到 include(),想到文件包含,用php伪协议。 知识点 看到 include(),require(),include_once(),require_once() ,想到文件包含,用php伪协议 ?filenamephp://filter/readconvert.base64-encode/…

NIO简介

nio三大组件 channel,buffer,selector channel为双向输入输出通道,buffer为缓存,selector为选择器,通过selector来选择线程对出现io操作的channel服务,可有有效的增加线程的工作效率,不用等待…

铁山靠之数学建模-基础篇

小黑子的数模基础篇 一、什么是数学建模1.1 数学模型分类1.2 备战准备什么1.3 组队学习路线1.4 赛前准备1.5 赛题选择1.5.1 赛题类型1.5.2 ABC赛题建议 1.6 学会查询1.6.1 百度搜索技巧1.6.2 查文献1.6.3 数据预处理 1.7 建模全过程 二、数模论文2.1 论文排版2.2 标题怎么写2.3…

看linux内核启动流程需要的arm汇编学习笔记(二)

文章目录 一、ldr1.地址偏移模式2.变基模式3.标签3.1 访问宏定义3.2 访问一个字符串3.3 访问一个data 二、ldp和stp1.双字节加载2.双字节存储3.双字节存储的后变基模式 三、位操作1. 移位2. 按位操作3. 位段插入4.位段提取5.零计数指令 四、跳转指令1. cmp比较两个数2. cmn负向…

SpringCloud学习(13)-SpringCloudAlibaba-Seata

一、介绍: Seata是阿里巴巴旗下的产品,是一款开源的分布式事务解决方案,旨在解决分布式事务问题。 我们有必要先了解一下分布式事务: 在微服务体系中,每一个模块都有连接一个数据库,这一点与单体项目是不…

10-热点文章-定时计算

xxl-Job分布式任务调度 1 今日内容 1.1 需求分析 目前实现的思路:从数据库直接按照发布时间倒序查询 问题1: 如何访问量较大,直接查询数据库,压力较大 问题2: 新发布的文章会展示在前面,并不是热点文章 …

算法打卡26

今日任务: 1)332.重新安排行程 2)51.N皇后 3)37.解数独 332.重新安排行程 题目链接:332. 重新安排行程 - 力扣(LeetCode) 给定一个机票的字符串二维数组 [from, to],子数组中的两个…

2024年下半年软考报名时间

根据《人力资源社会保障部办公厅关于2024年度专业技术人员职业资格考试工作计划及有关事项的通知》,2024年软考一年将开考2次,而1次要考4天!上半年是5月25至28日,024下半年软考考试时间为11月9日-12日,2024年下半年软考…

菜狗学前端之JS高级笔记

老样子。复制上来的图片都没了,想看原版可以移步对应资源下载(资源刚上传,还在审核中) (免费) JS高级笔记https://download.csdn.net/download/m0_58355897/89102910 一些前提概念 一 什么是js高级 js高级是对js基础语法的一个补充说明,本质…

高效稳定转换!PW2205芯片轻松实现12V/24V转5V/3.3V 5A输出

在电子设备蓬勃发展的今天,高效稳定的电源转换技术成为了推动行业进步的关键。PW2205平芯微芯片推出的高效同步降压DC-DC转换器,以其出色的性能和广泛的应用领域,成为了市场上的热门选择。 PW2205转换器凭借其卓越的性能,为各类电…

AI智能滤镜解决方案,全新的视觉创作体验

一张精美的图片,一段引人入胜的视频,往往能够瞬间抓住观众的眼球,为企业带来不可估量的商业价值。然而,如何快速、高效地制作出高质量的视觉内容,一直是困扰众多企业的难题。美摄科技凭借其领先的AI智能滤镜解决方案&a…

电脑实时监控软件分享|五个好用的实时屏幕监控软件

电脑实时监控软件是一种专门设计用于实时监控和记录电脑用户操作行为、系统状态以及网络活动的软件工具。 这类软件主要服务于企业、教育机构、家庭或个人用户,用于确保网络安全、提升工作效率、监督员工行为、保护儿童在线安全、防止数据泄露等多种目的。 针对企业…

Vue.js中如何使用Vue Router处理浏览器返回键的功能

在Vue.js中,Vue Router默认提供了处理浏览器返回键的功能。当用户点击浏览器的返回键时,Vue Router会自动导航到历史记录中的上一个路由。然而,如果你想自定义返回键的行为或者在特定的页面上进行特殊处理,你可以使用Vue Router的…

面试(01)————JVM篇,最大白话的一集,常见概念的讲解以及GC监控调优等等

一、JDK体系结构图 二、JVM整体架构 三、JVM组成 3.1、JVM内存区域的执行底层原理 ​编辑 3.1.1、程序计数器 3.1.2、堆栈关系的发现 3.1.3、方法去和堆的关系 3.1.4、堆(重点) 3.1.4.1、可达性分析算法 3.1、内存泄漏测试以及堆区的GC监控 3.…

电脑硬盘分区表的两种格式:MBR 和 GPT

电脑硬盘分区表的两种格式:MBR 和 GPT 段子手168 2024-4-5 电脑硬盘分区表有两种格式:MBR 和 GPT: 一、MBR 分区表 1.MBR 是主引导记录 (Master Boot Record) 的英文缩写 在传统(Legacy)硬盘分区模式中&#xff0c…

零基础入门NLP - 新闻文本分类比赛方案分享 nano- Rank1

nano- 康一帅 简介 环境 Tensorflow 1.14.0Keras 2.3.1bert4keras 0.8.4 文件说明 EDA:用于探索性数据分析。data_utils:用于预训练语料的构建。pretraining:用于Bert的预训练。train:用于新闻文本分类模型的训练。pred&a…