#18 【4Sum】 tag:array
题目大意:给定一个数组和一个目标数,找出数组的四个数使其和与目标数最接近,返回所有可能的四个数。
解题思路:排序后暴力循环,步骤如下。
(1)数组排序。
(2)设i,j,k,l分别对应数组四个数的下标,固定i=0,设result空列表代表结果。
(3)固定j=i+1。
(4)设sum4 = nums[i]+nums[j]+nums[k]+nums[l]。
(5)如果sum4等于target,并且[nums[i],nums[j],nums[k],nums[l]]不在result列表里,插入之。
(6)判断sum4与target的大小,sum4小则往后递增k,sum4大则往前递减l,当k不再小于l时,将j固定为j+1,重复步骤4,直
到j等于len(nums)-2。
(7)固定i=i+1,重复步骤3,直到i等于len(nums)-3。
(8)返回result,函数退出。
class Solution:
def fourSum(self, nums, target):
nums.sort()
result = []
for i in range(len(nums)-3):
for j in range(i+1,len(nums)-2):
k,l = j+1,len(nums)-1
while k < l:
sum4 = nums[i]+nums[j]+nums[k]+nums[l]
if sum4 == target and [nums[i],nums[j],nums[k],nums[l]] not in result:
result.append([nums[i],nums[j],nums[k],nums[l]])
if sum4 < target:
k += 1
else:
l -= 1
return result
