• LeetCode OJ-- 3Sum Closest


    https://oj.leetcode.com/problems/3sum-closest/

    给一列数和target,在这一列数中找出3个数,使其和最接近target,返回这个target。

    一般思路是 n*n*n,优化的话,如下:

    先给数排序,然后对第一个数进行遍历 i,第二个数为i+1,第三个数为len-1,看得出的和于target的比较。如果小于target,则第二个数下标++,如果大于target,则第三个数下标--。

    class Solution {
    public:
        int threeSumClosest(vector<int> &num, int target) {
            int len = num.size();
            if(len<3)
                return 0;
            if(len == 3)
                return num[0]+num[1]+num[2];
    
            sort(num.begin(),num.end());
            int nearAns = num[0]+num[1]+num[2];
            for(int i = 0;i<len;i++)
            {
                int j = i+1;
                if(j>len-2)
                    break;
                int k = len-1;
                
                while(j<k)
                {
                    int sum = num[i]+num[j]+num[k];
                    if(sum == target)
                        return target;
                    if(sum<target)
                    {
                        if(abs(target - sum) < abs(target - nearAns))
                            nearAns = sum;
                        j++;
                    }
                    if(sum>target)
                    {
                        if(abs(target - sum) < abs(target - nearAns))
                            nearAns = sum;
                        k--;
                    }
                }
            }
            return nearAns;
        }
    };
  • 相关阅读:
    VUE中is的作用
    lable便签 for的作用
    Java第五课
    Java第四课课后作业
    Java第四课
    Unit6Java运算符
    Unit5Java数据类型
    Unit4如何使用类
    Java如何设计并编写类
    IDEA安装Alibaba,SonarLint代码规范检查插件
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3804087.html
Copyright © 2020-2023  润新知