力扣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;
    }
};
相关推荐
2301_8227032010 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
cmpxr_10 小时前
【C】数组名、函数名的特殊
c语言·算法
KAU的云实验台11 小时前
【算法精解】AIR期刊算法IAGWO:引入速度概念与逆多元二次权重,可应对高维/工程问题(附Matlab源码)
开发语言·算法·matlab
会编程的土豆11 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
低频电磁之道11 小时前
解决 Windows C++ DLL 导出类不可见的编译错误
c++·windows
大熊背12 小时前
如何利用Lv值实现三级降帧
算法·自动曝光·lv·isppipeline
大尚来也12 小时前
驾驭并发:.NET多线程编程的挑战与破局之道
java·前端·算法
向阳而生,一路生花12 小时前
深入浅出 JDK7 HashMap 源码分析
算法·哈希算法
君义_noip12 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s