高级编程技术 课后作业十三(第8周第2次)

本文介绍了一个经典的编程面试题目——4Sum问题。通过排序和双指针技巧,文章提供了一种有效的解决方案来寻找数组中和为目标值的四个数的所有组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值