代码随想录 -- 哈希表 -- 四数之和

18. 四数之和 - 力扣(LeetCode)

思路:(与三数之和类似,在外面加一层循环)

        1. 先将 nums 按升序排序

        2. 初始状态:k = 0,i = k+1,left = i+1,right = len(nums)-1

        3. 进入第一层 for 循环:

        如果 nums[k]>0 and target>0 and nums[k]>targrt 时,不存在满足条件的四元组。(剪枝)

        如果 nums[k]==nums[k-1] and k>0 时,continue。(去重)

        4. 进入第二层 for 循环:

        如果 nums[i]==nums[i-1] and i>k+1 时,continue。(去重)

        5. 进入第三层 while 循环:

        当 left

        如果 sum>target,right-=1;如果 sum

        继续去重:如果 nums[left]==nums[left+1],left+=1;如果 nums[right]==nums[right-1],right-=1。

        left+=1,right-=1

class Solution(object):
    def fourSum(self, nums, target):
        res = []
        nums.sort()
        for k in range(len(nums)):
            if nums[k]>0 and target>0 and nums[k]>target:
                break
            if k>0 and nums[k]==nums[k-1]:
                continue
            for i in range(k+1,len(nums)):
                if i>k+1 and nums[i]==nums[i-1]:
                    continue
                left,right=i+1,len(nums)-1
                while lefttarget:
                        right-=1
                    elif sum

你可能感兴趣的:(代码随想录,散列表,数据结构,算法,leetcode,python)