3Sum Closest--LeetCode

本文探讨了如何从整数数组中找出三个数,使其和最接近给定的目标值。通过递归回溯的方法,实现了遍历所有可能的组合,并返回最接近目标值的三数之和。

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

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
思路:从中挑选出任意三个,比较这三个值和目标相距最经的和是什么

void helper(vector<int>& vec,int index,int num,vector<int>& path,int target,int& difference,int& result)
{
	if(index >= vec.size())
		return ;
	path.push_back(vec[index]);
	num--;
	if(num ==0)
	{
		int i=0;
		int sum=0;
		sum =accumulate(path.begin(),path.end(),sum);
		if(difference > abs(target-sum))
		{
      difference = abs(target-sum);
		  result = sum;          
    }
		 
	}
	helper(vec,index+1,num,path,target,difference,result);
	path.pop_back();
	num++;
	helper(vec,index+1,num,path,target,difference,result);
}

int threeSumClosest(vector<int>& vec,int target)
{
	if(vec.size()==0)
		return 0;
	vector<int> path;
	int result;
	int difference = numeric_limits<int>::max();
	helper(vec,0,3,path,target,difference,result);
    return result;
} 
ps:其实这个题目的思路和组合的思路一样,只不过这里选择出来之后还需要和目标元素进行比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值