16. 最接近的三数之和

简介: 16. 最接近的三数之和

题目描述

给你一个数组nums,和目标值target。从nums选出3个数,使这3个数的和最接近target,返回这三个数的和。


解题思路

本题和3数之和一样(但这个可以不用去重)。固定一个数,然后双指针找其他两个数。


在遍历的过程中,找到最接近target的3元组。


如何移动两个指针呢?——看具体的代码实现。

代码

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        int ret=0;
        //差值
        int dif=INT_MAX;
        for(int i=0;i<n;i++)
        {
            int l=i+1,r=n-1;
            while(l<r)
            {
                //更新和,差值
                int sum=nums[l]+nums[r]+nums[i];
                int d=sum-target;
                if(abs(d)<dif)
                {
                    ret=sum;
                    dif=abs(d);
                }

                //如何移动
                if(d>0) r--;
                else if(d<0) l++;
                else return target;
            }
        }
        return ret;
    }
};
相关文章
|
4月前
|
算法 测试技术 C#
【贪心】【分类讨论】2499. 让数组不相等的最小总代价
【贪心】【分类讨论】2499. 让数组不相等的最小总代价
|
1月前
|
算法
LeetCode第16题最接近的三数之和
该文章介绍了 LeetCode 第 16 题最接近的三数之和的解法,与第 15 题类似,通过双指针法减少循环次数,根据差值的绝对值来更新最接近的和,并总结了双指针可减少循环次数的要点。
|
3月前
16. 最接近的三数之和
16. 最接近的三数之和
|
4月前
|
算法 测试技术 C#
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
|
4月前
16.最接近的三数之和
16.最接近的三数之和
26 0
动态规划|【斐波那契数列模型 】|746.使用最小花费爬楼梯
动态规划|【斐波那契数列模型 】|746.使用最小花费爬楼梯
|
4月前
|
搜索推荐
【hoare优化版】快速排序算法 | 三数取中&小区间优化(2)
【hoare优化版】快速排序算法 | 三数取中&小区间优化(2)
55 0
|
4月前
|
算法 C++ 索引
寻找最接近子数组和的算法设计及其C++实现
寻找最接近子数组和的算法设计及其C++实现
37 4
|
4月前
leetcode-16:最接近的三数之和
leetcode-16:最接近的三数之和
43 0
LeetCode: 16. 最接近的三数之和 | 双指针专题
【LeetCode: 16. 最接近的三数之和 | 双指针专题 】
53 1