leetcode(1.两数之和)

两数之和:

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码python3:

class Solution:
    def twoSum(self, nums, target):
        ss=sorted(nums)
        i=0
        j=len(ss)-1
        while i!=j:
            while ss[i]+ss[j]<target:
                i=i+1
                break
            while ss[i]+ss[j]>target:
                j=j-1
                break
            if ss[i]+ss[j]==target:
                if ss[i]!=ss[j]:
                    return sorted([nums.index(ss[i]),nums.index(ss[j])])
                else:
                    ii=nums.index(ss[i])
                    nums.pop(ii)
                    jj=nums.index(ss[j])+1
                    return sorted([ii,jj])

这个方法比较符合自己一开始的想法,使用的是快排的基本思想,有一个重复数值的处理没充分考虑到。看了官方题解使用的是哈希函数来进行的处理,最快捷的一种方法是在hash表中边存储边比较:

def getSum(self, nums, target):
    nums_dict = {}
    for i_dx, i_value in enumerate(nums):
        ic_value = target - i_value
        if ic_value in nums_dict.keys():
            return [nums_dict[ic_value], i_dx]
        nums_dict[i_value] = i_dx

下面的这段代码与自己开始的想法相比较,代码量有了很大的减少,但是也算是殊途同归,整个方法更加简洁明了,值得借鉴。
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xushikou1514

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值