zoukankan      html  css  js  c++  java
  • 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).

    分析:基本思想和3Sum差不多,不过本题要求求解与target最接近的三数之和。同理,先对数组进行排序,然后两边夹逼。在设置初始最接近的数字时,设为int型最大值。

    运行时间:15ms

     1 class Solution {
     2 public:
     3     int threeSumClosest(vector<int>& nums, int target) {
     4         //if(nums.size() < 3) return 0;
     5         if(nums.size() == 3) return nums[0] + nums[1] + nums[2];
     6         sort(nums.begin(), nums.end());
     7         int closest = pow(2, 31) - 1, result = 0;
     8         
     9         for(int a = 0; a < nums.size() - 2; a++){
    10             int b = a + 1, c = nums.size() - 1;
    11             while(b < c){
    12                 int diff = nums[a] + nums[b] + nums[c] - target;
    13                 if(diff < 0) b++;
    14                 else if(diff > 0) c--;
    15                 else return target;
    16                 
    17                 if(abs(diff) < closest){
    18                     result = diff + target;
    19                     closest = abs(diff);
    20                 }
    21             }
    22         }
    23         return result;
    24     }
    25 };
  • 相关阅读:
    bzoj1648:奶牛野餐
    bzoj1650:跳石子
    bzoj1643:贝西的秘密草坪
    bzoj1639:月度开支
    bzoj1636:Balanced Lineup
    bzoj1634:护花
    .
    bzoj1620:时间管理
    bzoj1611:流星雨
    bzoj1609:麻烦的聚餐
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4495146.html
Copyright © 2011-2022 走看看