15.3Sum &16.3Sum Closest

第16题是找一个和target最接近的数,两个指针双层遍历即可:


class Solution(object):
    def threeSumClosest(self, nums, target):
        result=nums[0]+nums[1]+nums[2]
        nums.sort()
        for i in range(len(nums)-2):
            j,k=i+1,len(nums)-1
            while j<k:
                x=nums[i]+nums[j]+nums[k]
                if x==target:
                    return target
                if abs(x-target)<abs(result-target):
                    result=x
                if x>target:
                    k-=1
                else:
                    j+=1
        return result

第15题,我可以采用同样的方法,这个时候要找的是目标和为0
区别在于:
找到了之后,仍然要遍历完。
不允许重复,我用set来做。

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        n=len(nums)
        ans=set()#偷工减料用set保证不重复
        nums.sort()
        for i in range(n-2):
            j,k=i+1,n-1
            while j<k:
                sum=nums[i]+nums[j]+nums[k]
                if sum==0:
                    ans.add((nums[i],nums[j],nums[k]))
                    j+=1#需要遍历完
                elif sum>0:
                    k-=1
                else:
                    j+=1
        return [list(l) for l in ans]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值