概述
题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1、暴力求解:考虑从列表的第一个元素开始遍历,用target减去每个元素的值得到次目标值,在列表中搜索是否有满足的值;
列表元素下标获取的方法:
list.index(obj) #obj为目标对象
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
解题代码如下:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
subtarget=target-nums[i]
if subtarget in nums and nums.index(subtarget)!=i:
return [i,nums.index(subtarget)]
小修几次后通过~~~~
需要注意的点,结果输出不能为[i,i]的形式,即自身相加的情况,eg:[3,2,4],target=6时,开始时一直出错,后面想如果我设定subtarget!=nums[i]
大概就可以了,但还存在[3,3]的情况,这样会返回null~
所以必须使用下标来控制~~~~
amsosovegetables…继续学习!
看到有题解使用hash表也就是字典来写,自己也尝试了一下下~~
2、哈希表法:使用字典同时存储列表每个元素及其下标,然后使用目标值相减确定其是否在hash表中~
enumerate()
函数将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标;
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap={}
for i,v in enumerate(nums):
if target-v in hashmap:
return [hashmap[target-v],i]
else:
hashmap[v]=i
return []
注:这里一开始未使用常规的字典定义,hashmap[v]=i
,先对数据进行判断,第一次循环时hashmap为空,然后进入else,此时定义hashmap[v]=i
,即第一组数据存入字典,再对第二组数据进行判断,target-v2是否在hashmap中,如果在就是已经存入的第一组数据的情况,如果不在就将第二组数据继续存入字典中,以此类推;即对一组新的数据,判断其差是否在之前已存入的数据中。
最后
以上就是紧张水壶为你收集整理的Leetcode1:两数之和(简单题)两种方法 python3的全部内容,希望文章能够帮你解决Leetcode1:两数之和(简单题)两种方法 python3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复