leetcode(M) 3sum closest

来源:互联网 发布:mac收藏页面快捷键 编辑:程序博客网 时间:2024/05/16 11:56
  1. 3Sum Closest
    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).

代码:

class Solution {public:    int threeSumClosest(vector<int>& nums, int target) {        sort(nums.begin(),nums.end());       int i,j,k,res=nums[0]+nums[1]+nums[2],A;        for( i=0;i<nums.size();++i){            j=i+1;k=nums.size()-1;            while(j<k){                A=nums[i]+nums[j]+nums[k];                if(A-target==0) return target;                res=abs(res-target)<abs(A-target)?res:A;                if(A-target<0) ++j;                if(A-target>0) --k;            }        }        return res;    }};

后来看到leetcode讨论区,这个应该再加上判断nums.size()<=3,return accumulate(nums.begin(),nums.end(),0), 其中accumulate是用于累计计算的函数,默认情况下是求和。而其中第三个参数便是和的初始值。如果数据为a0, …, an,则accumulate返回a0 + … + an + 初始值。
同时if(A-target<0) ++j; if(A-target>0) --k;
可以简化成 A-target<0?++j:--k;

代码最终版:

class solution{public:int threeSumClosest(vector<int>& nums, int target){if(nums.size()<=3) return accumulate(nums.begin(),nums.end(),0);sort(nums.begin(),nums.end());int i,j,k,A,res=nums[0]+nums[1]+nums[2];for(i=0;i<nums.size();++i){j=i+1;k=nums.size()-1;while(j<k){A=nums[i]+nums[j]+nums[k];res=abs(res-target)<abs(A-target)?res:A;(A-target)>0?--k:++j;}}return res;}};
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在泰国想剪头发怎么办 省二证书丢了怎么办 职称计算机级别报错怎么办 科一不会用电脑怎么办 西安科目三挂了怎么办 我有c照想考a照怎么办 叉车证单位不给怎么办 刚练科目三害怕怎么办 摩托科目一考不过怎么办 人老了视力不好怎么办 2岁宝宝视力不好怎么办 唱歌音总是唱不准怎么办 考级没地方练琴怎么办 少儿声乐唱不准音该怎么办 学历认证报告编号忘记了怎么办 自考挂科10门了怎么办 高中的会考没过怎么办 毕业证和学位证丢了怎么办 大学毕业证学位证丢了怎么办 大学毕业证和学位证丢了怎么办 毕业证是士官证号码怎么办 自考本科准考证丢了怎么办 自考档案搞丢了怎么办 自考本科档案在自己手里怎么办? 本科自考准考证丢了怎么办 大学团员证丢了怎么办 大学开学团员证丢了怎么办 研究生开学没有团员证怎么办 研究生开学已经不是团员了怎么办 毕业了要搬宿舍怎么办 中专学历认证已停止怎么办 中专不做学历认证考试怎么办 大学生欠学费被扣毕业证怎么办 考警校体检没过怎么办 美国签证申请预约名字写错怎么办 当兵不从学校走怎么办 门牙崩了一小块怎么办 遇到很难过的事情怎么办 小孩子上课精力不集中怎么办 每天工作都很累压力大怎么办 重体力活搬不动怎么办