本文主要是介绍Leetcode18. 四数之和-python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
难度:中等
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:
[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]
]
思路:和三数求和一个思路,也是双指针法...可以看一下这个链接...https://blog.csdn.net/RHJlife/article/details/104885716不过只能两重循环再嵌套双指针法,注意去重操作即可~
遇见的坑:第二层循环去重操作...是i>k+1时才考虑去重...这个地方要注意(i,k实际含义详见代码)
代码如下:
class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""n=len(nums)res=[]#特殊情况if n<3:return []#排序nums.sort()res=[]for k in range(n-1):#重复数据不用再次循环if(k>0 and nums[k]==nums[k-1]):continuefor i in range(k+1,n):#重复数据不在循环,但是注意 当k+1项与前面重复是必须保留的,在这个地方我错了三次样例if(i>k+1 and nums[i]==nums[i-1]):continue#初始化指针L=i+1R=n-1while(L<R):if(nums[k]+nums[i]+nums[L]+nums[R]==target):res.append([nums[k],nums[i],nums[L],nums[R]])#找到结果时,如果重复数据存在,直接略过后继续查找while(L<R and nums[L]==nums[L+1]):L=L+1while(L<R and nums[R]==nums[R-1]):R=R-1L=L+1R=R-1elif(nums[k]+nums[i]+nums[L]+nums[R]>target):R=R-1else:L=L+1return res
这篇关于Leetcode18. 四数之和-python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!