Leetcode16. 3Sum Closest

探讨了如何在整数数组中找到三个数使它们的和最接近给定的目标值,并提供了一种高效的解决方案。该算法通过排序和双指针技巧减少了搜索空间。

摘要生成于 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).

这几个sum题都很像,等写完全部的时候总结一下。
这题的想法和上一题几乎一样,closest来表示最近的那一个,剩下的还是把三个数字的和转换成两个数字。
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int closest=nums[0]+nums[1]+nums[2];
        int min=abs(closest-target);
        sort(nums.begin(),nums.end());
       
        for(int k=0;k<nums.size()-2;k++)
        {
            int i=k+1;
            int j=nums.size()-1;
            while(i<j)
            {
                int sum=nums[k]+nums[i]+nums[j];
                int newmin=abs(sum-target);
                if(min>newmin)
                {
                    min=newmin;
                    closest=sum;
                }
                if(sum<target)
                    i++;
                else
                    j--;
            }
        }
        return closest;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值