【每日一题】【LeetCode】【第二天】【Python】两数之和

两数之和的解决之路= =

题干描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

比较简单,两数之和为target值就直接return结束,也不用管是否有多个符合条件的一对下标。直接双循环解决。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for k, v in enumerate(nums):
            for i in range(k+1, len(nums)):
                if v + nums[i] == target:
                    return [k, i]
                else:
                    continue
        return None

测试,没什么问题,直接提交,通过了。

在这里插入图片描述

第二次

再考虑是否有优化的可能。第一天学到了双指针的方法,但是是要求有序数组才可以实现的逻辑,这题不适合一上来就排序,因为最终返回的是原来数组的下标,排序反而打乱了下标,导致最后返回下标时很麻烦。

再看了看第一天写的代码,三数之和,通过确定的ab,就可以通过total-a-b就能得出c,从而少写一个循环。那我们这里也能用,通过target-a确定b,这样就可以减少一次循环了。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for k, v in enumerate(nums):
            temp = target - v
            if temp in nums:
                i = nums.index(temp)
                if i != k:
                    return [k, i]
                else:
                    continue
        return None

提交了,超过了57%,快60%了,结束。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值