16. 3Sum Closest

原创 2018年04月17日 02:18:33

问题描述

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

题目链接:


思路分析

给一个数组,找到数组中三个数的和最接近target的值。

类似于3sum的做法,转化为2sum来解决。首先将数组排序,然后循环确定一个first的值,second比first大1,third则从数组尾部开始遍历。

然后计算这三个数的和,与target比较,相等就直接返回,绝对值更小就更新,然后根据大小关系移动second或者third指针。

代码

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        if (nums.size() < 3)
            return 0;
        int cloest = nums[0] + nums[1] + nums[2];
        sort(nums.begin(), nums.end());
        for (int first = 0; first < nums.size() - 2; first++){
            if (first > 0 && nums[first] == nums[first - 1]) continue;
            //same output, pass.
            int second = first + 1;
            int third = nums.size() - 1;
            while (second < third){
                int cur = nums[first] + nums[second] + nums[third];
                if (cur == target)
                    return cur;
                if (abs(cur - target) < abs(cloest - target)){
                    cloest = cur;
                }
                if (cur < target)
                    second++;
                else
                    third--;
            }
        }
        return cloest;
    }
};

时间复杂度:O(n2)
空间复杂度:O(1)


反思

sort非常重要,对于相同情况的判断可以减轻计算量。还可以计算头三个和后三个的和来快速解决一些特殊的测试用例。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BigFatSheep/article/details/79969019

WIN2000漏洞(2) —— 绿色兵团的文章,简直爽呆了

WIN2000漏洞(2)加入时间:01-1-7 上午 11:43:28妖狐安全资讯网 现在开始会复杂些了(而这就是乐趣的源泉!:))。 在main函数的最后一行代码处设置断点,因为我们只关心这里所发生...
  • silver
  • silver
  • 2001-01-10 02:54:00
  • 1255

Leetcode #16 3Sum Closest 找3数之和最接近 解题小节

1 题目理解昨晚上光顾着吃深夜泡面,忘了更新了。。所以这一更就算是补上昨天的,今天的另算。这道题和 Leetcode #15 3Sum 三数之和 解题小节 很像,区别是#15是要三数之和等于目标值,这...
  • MebiuW
  • MebiuW
  • 2016-03-19 10:13:59
  • 524

LeetCode 16 3Sum Closest(C,C++,Java,Python)

Problem: Given an array S of n integers, find three integers in S such that the sum is closest ...
  • runningtortoises
  • runningtortoises
  • 2015-05-09 22:26:02
  • 1851

leetcode-java-16. 3Sum Closest

思路: 先升序排序,然后用第一重for循环确定第一个数字。 然后在第二重循环里,第二、第三个数字分别从两端往中间扫。 如果三个数的total等于target,返回target。 如果三个数的t...
  • github_34514750
  • github_34514750
  • 2016-06-07 21:47:12
  • 536

16. 3Sum Closest Leetcode Python

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • hyperbolechi
  • hyperbolechi
  • 2015-01-17 10:10:08
  • 780

LeetCode 16. 3Sum Closest(给定和,求三元组)

题目描述:    Given an array S of n integers, find three integers in S such that the sum is closest to a ...
  • princexiexiaofeng
  • princexiexiaofeng
  • 2018-03-17 15:20:11
  • 11

【LeetCode】3Sum Closest 解题报告

【题目】 Given an array S of n integers, find three integers in S such that the sum is closest to a gi...
  • ljiabin
  • ljiabin
  • 2014-10-30 16:57:05
  • 8204

15. 3Sum,16. 3Sum Closest,18. 4Sum(最后一个方法重要)重要

第一题、15. 3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = ...
  • shanshanhi
  • shanshanhi
  • 2017-02-28 18:38:27
  • 282

【LeetCode】LeetCode——第16题:3Sum Closest

【LeetCode】LeetCode——第16题:3Sum Closest
  • hujingshuang
  • hujingshuang
  • 2016-04-29 21:18:52
  • 4243

3Sum Closest -- LeetCode

原题链接: http://oj.leetcode.com/problems/3sum-closest/ 这道题跟3Sum很类似,区别就是要维护一个最小的diff,求出和目标最近的三个和。brute ...
  • linhuanmars
  • linhuanmars
  • 2014-02-22 23:22:01
  • 12867
收藏助手
不良信息举报
您举报文章:16. 3Sum Closest
举报原因:
原因补充:

(最多只允许输入30个字)