leetCode热题100——两数之和(python)

题目

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

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

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

第一遍的代码        

class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""n = len(nums)for i in range(n):y = target - nums[i]if y in nums:j = nums.index(y)if j != i:return [i,j]

 经过一段时间的学习后有了新的思路方法

思路

为了解决这个问题,我们可以使用哈希表(在Python中通常使用字典)来存储数组中的元素和它们的索引。我们遍历数组,对于每个元素,我们检查目标值减去当前元素的差值是否已经在哈希表中。如果在,那么我们就找到了两个数,它们的和为目标值;如果不在,我们就把当前元素和它的索引添加到哈希表中。

def twoSum(nums, target):  num_dict = {}  # 创建一个空字典用于存储元素和它们的索引  for i, num in enumerate(nums):  complement = target - num  # 计算目标值与当前元素的差值  if complement in num_dict:  # 检查差值是否已经在字典中  return [num_dict[complement], i]  # 返回差值的索引和当前元素的索引  num_dict[num] = i  # 将当前元素和它的索引添加到字典中  # 如果遍历完数组都没有找到答案,这里实际上不需要return,因为题目保证了只有一个答案  # 但为了完整性,可以添加一个异常处理或默认返回值  raise ValueError("No two sum solution")  # 示例用法  
nums = [2, 7, 11, 15]  
target = 9  
print(twoSum(nums, target))  # 输出: [0, 1]

上面这种方法,这段代码首先定义了一个空字典 num_dict,然后遍历输入数组 nums。对于数组中的每个元素 num,它计算出目标值与 num 的差值 complement,然后检查 complement 是否已经在 num_dict 中。如果在,就找到了两个数的索引;如果不在,就将 num 和它的索引 i 添加到 num_dict 中。最后,如果遍历完整个数组都没有找到答案,就会抛出一个异常(虽然题目保证了只有一个答案,但这里还是加上了异常处理以应对更广泛的情况)。

对此不仅仅可以使用哈希表,同时也可以使用双指针(先排序)的方法

这种方法首先对数组进行排序,然后使用双指针从数组的两端向中间移动。如果当前两个指针指向的元素之和等于目标值,则返回它们的索引;如果和小于目标值,则移动左指针;如果和大于目标值,则移动右指针。但需要注意的是,由于排序会改变元素的原始顺序,我们需要使用额外的数据结构(如列表的索引和值组成的元组)来记录原始索引。

双指针(排序)

def twoSum_sort(nums, target):  # 使用列表推导式创建包含索引和值的元组列表,然后排序  nums_with_indices = sorted([(num, idx) for idx, num in enumerate(nums)])  left, right = 0, len(nums_with_indices) - 1  while left < right:  current_sum = nums_with_indices[left][0] + nums_with_indices[right][0]  if current_sum == target:  # 返回原始索引(不是排序后列表的索引)  return [nums_with_indices[left][1], nums_with_indices[right][1]]  elif current_sum < target:  left += 1  else:  right -= 1  return None  # 如果没有找到,返回None或抛出异常  # 示例用法  
nums = [2, 7, 11, 15]  
target = 9  
print(twoSum_sort(nums, target))  # 输出: [0, 1](假设排序不会改变相等元素的相对顺序)

注意:在实际使用时,由于排序可能会改变相等元素的相对顺序,所以在排序前需要确保相等元素的相对顺序在排序后不会改变(例如,使用稳定的排序算法,或者在排序时使用一个自定义的比较函数来确保这一点)。然而,由于题目保证每种输入只会对应一个答案,并且数组中的元素都是唯一的,所以在这种情况下我们不需要担心这个问题。

 哈希表

def twoSum_hash(nums, target):  num_dict = {}  for i, num in enumerate(nums):  complement = target - num  if complement in num_dict:  return [num_dict[complement], i]  num_dict[num] = i  return None  # 如果没有找到,返回None或抛出异常  # 示例用法  
nums = [2, 7, 11, 15]  
target = 9  
print(twoSum_hash(nums, target))  # 输出: [0, 1]

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

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

相关文章

Node.js 是一个开源的 跨平台的JavaScript运行环境

https://www.npmjs.com/ 中央仓库 Visual Studio Code - Code Editing. Redefined https://openjsf.org/ OpenJS 促进了关键 JavaScript 技术在全球范围内的广泛采用和持续发展。 Apache服务器 Nginx服务器 Tomcat服务器 Node.js服务器 Gunicorn服务器 uW…

低代码平台实践:打造高效动态表单解决方案的探索与思考

&#x1f525;需求背景 我司业务同事在抓取到候选人的简历之后&#xff0c;经常会出现&#xff0c;很多意向候选人简历信息不完整&#xff0c;一个个打电话确认的情况&#xff0c;严重影响了HR的工作效率&#xff0c;于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

.NET C# 操作Neo4j图数据库

.NET C# 操作Neo4j图数据库 目录 .NET C# 操作Neo4j图数据库环境Code 环境 VisualStudio2022 .NET 6 Neo4j.Driver 5.21 Code // 连接设置 var uri "bolt://localhost:7687"; var user "neo4j"; var password "password"; // 请替换为你的…

docker 配置与使用

目录 安装docker 作者遇到的问题1&#xff1a;安装docker 错误说明 解决方法&#xff1a; 作者遇到问题2&#xff1a;GPG密钥问题 问题说明 解决方法&#xff1a; 方法一&#xff1a;使用备用的GPG密钥服务器 方法二&#xff1a;使用国内镜像源 方法3&#xff1a;手动下…

使用lua开发apisix自定义插件并发布

接到老大需求&#xff1a;需要对cookie进行操作&#xff0c;遂查询apisix的自带插件&#xff0c;发现有&#xff0c;但不满足&#xff0c;于是自己开发了一个插件并部署&#xff0c;把开发部署流程写在这里打个日志怕以后忘掉。 一、需求 插件很简单&#xff0c;就是在reques…

什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;从科普的角度&#xff0c;…

HTTP 抓包工具——Fiddler项目实战

网络爬虫实质上是模拟浏览器向 Web 服务器发送请求。对于一些简单的网络请求&#xff0c;我们 可以通过查看 URL 地址来构造请求&#xff0c;但对于一些稍复杂的网络请求&#xff0c;仍然通过观察 URL 地 址将无法构造正确。因此我们需要对这些复杂的网络请求进行捕获分…

【总线】AXI4第二课时:深入AXI4总线的基础事务

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

数字化和信息化的区别是什么?

市面上有些企业专门区分出了数字化和信息化的区别&#xff0c;认为数字化基于信息化的基础之上。但也有一些专家认为两者不是独立或前后的概念&#xff0c;属于近似概念&#xff0c;它到底应当怎样被定义&#xff1f; 其实之前已经写过好几篇这个类型的文章了&#xff0c;但是总…

express+vue在线im实现【四】

往期内容 expressvue在线im实现【一】 expressvue在线im实现【二】 expressvue在线im实现【三】 本期示例 本期总结 支持了音频的录制和发送&#xff0c;如果觉得对你有用&#xff0c;还请点个免费的收藏与关注 下期安排 在线语音 具体实现 <template><kl-dial…

Retrofit类型安全的HTTP客户端库

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库&#xff0c;用于Android和Java平台&#xff0c;它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口&#xff0c;让你可以用更简洁的代码形式调用RESTful API&#xff0c;Android网络编程重点…

Vue与SpringSecurity认证整合-06

Vue与SpringSecurity整合 我们要知道springsecurity是一个安全框架,我们在后端的时候没有接触前端,springsecurity引入依赖之后,启动项目会对我们进行拦截,让我们登录,然后我们制定了一个登录页面,也是后端的,我们可以指向我们的登录页面,但是与Vue整合之后,登录页面肯定是在Vu…

贾英才主任受聘担任“两个中心”专家委员会委员

近日&#xff0c;第二届海峡两岸中西医结合肾脏病学术大会授牌仪式在北京隆重举行。 这一盛会吸引了众多医学领域的专家学者&#xff0c;共同探讨中西医结合治疗肾脏病的最新进展和未来发展方向。 在此次大会上&#xff0c;崇文门中医医院的贾英才主任凭借其在肾脏病领域的卓…

【C语言 || 数据结构】二叉树

文章目录 前言 二叉树1.树1.1树的定义1.2 树的结构 2.特殊的树&#xff08;二叉树&#xff09;2.1 二叉树的概念2.2 特殊的二叉树2.3 二叉树的储存2.3.1 顺序储存二叉树2.3.2 链表储存二叉树 2.4 二叉树的遍历2.4.1 二叉树的中序遍历2.4.2 二叉树的前序遍历2.4.3 二叉树的后序遍…

【React】使用Token做路由权限控制

在components/AuthRoute/index.js中 import { getToken } from /utils import { Navigate } from react-router-domconst AuthRoute ({ children }) > {const isToken getToken()if (isToken) {return <>{children}</>} else {return <Navigate to"/…

服务器主机托管服务内容科普

在现代信息技术快速发展的背景下&#xff0c;服务器主机托管服务已成为众多企业、机构和个人不可或缺的一部分。本文将为您详细科普服务器主机托管服务的内容&#xff0c;帮助您更好地理解和选择适合自己的托管方案。 一、硬件与基础设施 服务器主机托管服务首先提供了硬件和网…

艾公益 艾多美(中国)有限公司向烟台市捐赠爱心物资

2024年6月18日&#xff0c;艾多美&#xff08;中国&#xff09;有限公司&#xff0c;在烟台市高新区举办了2项爱心捐赠仪式。 在本次爱心捐赠活动中&#xff0c;艾多美&#xff08;中国&#xff09;有限公司携手烟台市慈善总会向烟台市贫困女童捐赠助学金、爱心物资&#xff0c…

【字符串验证】验证码

【字符串验证】验证码 【参考代码】 #include <iostream> #include <cstring> using namespace std; int main(){ string a "AV8d";string b; cin >> b;for(int i0; i<a.length(); i){if(a[i]>A && a[i] < Z){a[i]32;}if…

算法008:四数之合

四数之和. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/4sum/description/ 在前面的两个题中&#xff0c;我们已经完成了两数之和和三数之和&#xff0c;到本题四…

React 中的服务器渲染组件

在前后分离架构以前&#xff0c;所有的 Html 业务都是后端渲染&#xff0c;返回前前端显示&#xff0c;后端渲染把前后端逻辑耦合在一起&#xff0c;增大系统的复杂度&#xff0c;不易于扩展。React 中的 Server组件&#xff0c;准确的说是服务器进行渲染&#xff0c;无论是什么…