力扣16 最接近的三数之和(C++)

题目


思路

排序+双指针


知识点

减去负数溢出

防止减去一个负数溢出,如果target是负数,ans-target就会溢出

int ans = INT_MAX / 2;

abs绝对值函数

abs 是 C++ 中的绝对值函数(absolute value),返回一个数的非负值。


题解

注意for循环需要从0遍历到nums.size()-2

复制代码
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int ans=INT_MAX/2;
        
        for(int i=0;i<nums.size()-2;i++){
            if(i>0 && nums[i]==nums[i-1]){
                continue;
            }

            int s=nums[i]+nums[i+1]+nums[i+2];
            if(s>target){
                if(abs(s-target)<abs(ans-target)){
                    ans=s;
                }
                break;
            }

            s=nums[i]+nums[nums.size()-1]+nums[nums.size()-2];
            if(s<target){
                if(abs(s-target)<abs(ans-target)){
                    ans=s;
                }
                continue;
            }

            int left=i+1;
            int right=nums.size()-1;
            while(left<right){
                s = nums[i]+nums[left]+nums[right];

                if(s==target) return s;

                if(abs(s-target)<abs(ans-target)){
                    ans=s;
                }

                if(s<target) left++;
                else right--;
            }
        }//for i
        return ans;
    }
};
相关推荐
罗西的思考10 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营12 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队13 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
用户8055336980320 小时前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法