两数之和and三数之和

1、两数之和

#1、两数之和
#(1)返回数而不是下标,改变了原来的数组
def twosum(nums,target):
    nums.sort()
    left,right=0,len(nums)-1
    while left<right:
        SUM=nums[left]+nums[right]
        if SUM==target:
            return nums[left],nums[right]
        elif SUM<target:
            left+=1
        else:
            right-=1
    return False
twosum([1,2,3,4],7)
#(2)要求返回下标,这个情况下用字典,key是元素,value是元素下标
def twosum2(nums,target):
    dic={}
    for i ,num  in enumerate(nums):
        if target-num in dic:
            return i,dic[target-num]
        else:
            dic[num]=i
  1. 三数之和
    看题目要求,是返回所有不重复的数组,还是返回一组数组即可
## (2)三数之和为0,预排序+双指针,返回所有的数组
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        #这个问题要注意两点,第一层循环遍历的时候有重复数字,第二层双指针遍历的时候有重复数字
        res,curList=[],[]
        nums.sort()
        for i in range(len(nums)):
            if i==0 or nums[i]>nums[i-1]:#加判断
                left,right=i+1,len(nums)-1
                while left<right:
                    sum_t=nums[i]+nums[left]+nums[right]
                    if sum_t==0:
                        curList=[nums[i],nums[left],nums[right]]
                        res.append(curList)
                        left=left+1
                        right=right-1
                        while left <right and nums[left]==nums[left-1]:#加判断
                            left+=1
                        while left<right and nums[right]==nums[right+1]:
                            right-=1
                    elif sum_t<0:
                        left+=1
                    else:
                        right-=1
        return res
发布了46 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43826596/article/details/105550460