16. 3Sum Closest

Description

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).

Solution

本题和15. 3Sum不同,不是求很多组结果,而是一个最和target接近的三数之和sum而已,结果唯一,同样的步骤,做好中间结果的保存

int threeSumClosest(vector<int>& nums, int target) {
    int closestSum = nums[0] + nums[1] + nums[2];
    sort(nums.begin(), nums.end());
    for (int i = 0; i < nums.size() - 2; ++i) {
        if (target < 0 && nums[i] > 0) {//提前剪枝
            break;
        }
        int begin = i + 1, end = nums.size() - 1;
        while (begin < end) {
            int sum = nums[i] + nums[begin] + nums[end];
            if (abs(closestSum - target) > abs(sum - target)) { //如果出现更接近的sum
                closestSum = sum;
            }
            if (sum > target) {
                end--;
            } else if (sum < target) {
                begin++;
            } else {
                return target;
            }
        }
    }
    return closestSum;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,196评论 0 10
  • 在表哥表姐的眼里,淡定姨妈是个“神憎鬼厌”的超级怪物。 01 淡定姨妈出院了 淡定姨妈出院回家了,发现家里窗明几净...
    愚鹟不老阅读 3,459评论 6 9
  • 表层习惯:早起A,锻炼A,午休A,早睡C,学习C。 四月的第一天,马上要迎来清明节小长假给,万分开心可以回家。完成...
    高N少女阅读 1,175评论 0 0
  • 干燥的秋风,静静地 干燥枯败的树叶 飘飘然 待着相遇的时刻 时间顺次死去 无法用语言代替 染红 一呼一吸翩翩起舞 ...
    685a49956319阅读 1,301评论 0 0
  • 我要讲一个关于春天的故事 你不知道吗 春天不是季节 而是相遇的心情 故事最重要的部分已经讲完了 我 春天 你 ——...
    段童阅读 1,783评论 0 2

友情链接更多精彩内容