可惜没如果=_=
时光的河入海流

题目链接在这里:四数之和

这道题和前面的三数之和一模一样,只是需要枚举前两个数而已,需要注意一下前两个数的重复点的判断,并且不要忘记排序。

from ast import List


class Solution:
    def fourSum(self, nums: List, target: int):
        n = len(nums)
        if n < 4 or not nums:
            return []
        ans = []
        nums.sort()
        for i in range(0, n-3):
            if not i==0 and nums[i]==nums[i-1]:
                continue
            if nums[i]+nums[i+1]+nums[i+2]+nums[i+3] > target:
                break
            if nums[i]+nums[n-1]+nums[n-2]+nums[n-3] < target:
                continue
            for j in range(i+1, n-2):
                # print("i:",i,"j:",j)
                if not j==i+1 and nums[j]==nums[j-1]:
                    continue
                L = j+1
                R = n-1
                while L < R:
                    if nums[i]+nums[j]+nums[L]+nums[R]==target:
                        ans.append([nums[i],nums[j],nums[L],nums[R]])
                        while L<R and nums[L]==nums[L+1]:
                            L+=1
                        while L<R and nums[R]==nums[R-1]:
                            R-=1
                        L+=1
                        R-=1
                    elif nums[i]+nums[j]+nums[L]+nums[R]<target:
                        L+=1
                    else:
                        R-=1
        return ans

if __name__=="__main__":
    nums = [2,2,2,2,2]
    target = 8
    ans = Solution().fourSum(nums=nums,target=target)
    print(ans)
posted on 2023-03-26 03:59  珍珠鸟  阅读(12)  评论(0编辑  收藏  举报