题目链接在这里:四数之和
这道题和前面的三数之和一模一样,只是需要枚举前两个数而已,需要注意一下前两个数的重复点的判断,并且不要忘记排序。
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)
未来是什么样,未来会发生什么,谁也不知道。
但是我知道,
起码从今天开始努力,
肯定比从明天开始努力,
要快一天实现梦想。
千里之行,始于足下! ——《那年那兔那些事儿》