Leetcode1:两数之和(简单题)两种方法 python3

题目:给定一个整数数组 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中,如果在就是已经存入的第一组数据的情况,如果不在就将第二组数据继续存入字典中,以此类推;即对一组新的数据,判断其差是否在之前已存入的数据中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值