leetcode1:两数之和 python3解法

el/2024/4/13 13:36:16
题目描述:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

作答:
方法1:
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:n = len(nums)for i in range(n): # 0~n-1y = target-nums[i]if y in nums:if (nums.count(y) == 1) and (y == nums[i]): #避免同一个元素用两次,比如2+2=4continueelse:return i, nums.index(y, i+1) #在i之后寻找y的索引值

执行用时:1040ms,内存消耗:14.6MB

方法2:来自方法1的改编,使用切片
def twoSum(nums, target):for i in range(len(nums)):temp_list = nums[:i]  #为什么不能是[(i+1):],因为i是最后一个就不行哒y = target - nums[i]if y in temp_list:return temp_list.index(y),i

执行用时:444ms,内存消耗:14.7MB

方法3:使用字典模拟哈希。

利用字典,遍历列表中的元素时,将每个元素需要的值(target-num[i])作为key,当前元素的下标i存入字典中,理解为第i个元素需要的值在字典中,此后的遍历先看当前的元素是否在字典中被需要。是,则返回需要元素的下标和当前元素的下标。否则,将target-num[i]:i存入字典中

def twoSum(nums, target):hash = {}  #定义一个字典for i in range(len(nums)):y = target - nums[i]if nums[i] in hash: #如果当前元素在字典的key中,即被需return hash[nums[i]], ielse:hash[y] = i  #将当前元素所需要的值和当前元素的下标存入字典中     

执行用时:60ms,内存消耗:15MB

提交成功,但是测试会存在问题的一种方法
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:n = len(nums)for i in range(n):y = target-nums[i]if y in nums and nums.index(y) != i:return i, nums.index(y)

测试用例:
[3,3] 6
返回:[1,0]
预期:[0,1]

这种方法是方法1的原型。

使用字典的方法3,是我目前万万想不到的,看了大佬们的解法,我还想了一会儿,哎。
python也是才学,这次的题让我意思到python的列表我还有很多需要解决的问题,所以在逐步整理列表的知识。有需要可以看一看。

python列表基础


http://www.ngui.cc/el/4994715.html

相关文章

C++复制构造函数和构造函数调用小困惑

最近看清华大学郑莉老师的C课程&#xff0c;过C的基础知识。遇到了一点小问题。 B站清华大学C课程 在进行类组合例子的调试中&#xff0c;有些不解的地方。先上代码。 #include "pch.h" #include <iostream> using namespace std;class Point { public: …

前置++与后置++区别

对于前置与后置以前只知道它们的两点区别&#xff1a; 1. 前置&#xff1a;先加再用&#xff1b;后置&#xff1a;先用后加。 2. i效率比i效率高&#xff1b; 今日又添加一项&#xff1a; 3. 前置可操作&#xff0c;后置不可操作 只知其果&#xff0c;不明其因非学者姿态。 下…

C++基础(code)

C基础学习&#xff08;code&#xff09; 算是突袭学习吧&#xff0c;可能不是很细。 英语渣&#xff0c;但还是可能会写一些英文注释&#xff0c;提高提高~~ #include <iostream> using namespace std;//函数声明&#xff0c;要么定义在main前,要么在main前面自己添加定…

NEO4J 安裝

NEO4J 安裝 安裝教程&#xff1a; https://blog.csdn.net/sinat_36226553/article/details/108541370 注意事項 不能安裝在 D:\Program Files下&#xff0c;會有不能識別’.ps1’ 拓展名&#xff0c;猜測是不能識別目錄中的空格導致。

Elasticsearch 进阶学习

先上两个学习链接&#xff1a; Elasticsearch学习笔记_KISS-CSDN博客 Elasticsearch API查询_森四杨的博客-CSDN博客 1. es分布式集群 1. 搭建过程 2. 概念 节点、分片&#xff08;Shards&#xff09;、副本(Replicas)、索引、文档、字段、映射对索引中的文档可以进行索引…

python 正则表达式转义上的 r 与反斜杠

先阅读 https://blog.csdn.net/jinixin/article/details/56705284 后举例 转义有两种&#xff1a; 首先是正常的字符串转义&#xff0c;对于特殊的字符进行转义。然后&#xff0c;对于正则表达式还要进行一次转义。 使用原生字符r 可以跳过一次转义。所以在正则表达式前可以…

Python 转义字符和正则表达式的元字符

python转义字符 图片来自 Python 转义字符 \x 正则表达式元字符 正则表达式其他字符

neo4j 关于日期和时间的操作

最近使用neo4j存储数据&#xff0c;其中包含了大量的时间数据&#xff0c;存储的时候都是以字符串的形式存储&#xff0c;如 ‘11:07’&#xff0c;导致后期查询后的数值计算比较困难。中文的这方面笔记似乎比较少&#xff0c;于是记录一下。日期和具体的时间操作类似&#xff…

Lua语言在移动iSO平台上成为新宠

http://www.cwowaddon.com/article-39-1.html Lua最流行的应用场景是在游戏中作为处理逻辑的脚本&#xff0c;即用来编写游戏的任务脚本&#xff0c;以实现游戏的可配置性和可扩展性。在游戏中Lua脚本的加载不需重启服务器&#xff0c;尽管脚本的运行效率低于编译好的二进制代…

Leaves -- iOS上一种图书翻页效果的实现

http://www.cnblogs.com/zhw511006/archive/2011/10/14/2212187.html 参考资料&#xff1a;App Store-safe Page Curl animations 源码下载地址&#xff1a;https://github.com/brow/leaves