本文主要是介绍代码随想录 -- 哈希表 -- 四数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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<right 时,计算 sum = nums[k]+nums[i]+nums[left]+nums[right],
如果 sum>target,right-=1;如果 sum<target,left+=1;否则说明 sum==target,符合题意,将此四元组加入res。
继续去重:如果 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:breakif k>0 and nums[k]==nums[k-1]:continuefor i in range(k+1,len(nums)):if i>k+1 and nums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1while left<right:sum = nums[k]+nums[i]+nums[left]+nums[right]if sum>target:right-=1elif sum<target:left+=1else:res.append([nums[k],nums[i],nums[left],nums[right]])while left<right and nums[right]==nums[right-1]:right-=1while left<right and nums[left]==nums[left+1]:left+=1 left+=1right-=1return res
这篇关于代码随想录 -- 哈希表 -- 四数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!