zoukankan      html  css  js  c++  java
  • 16.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).
    先对数组进行排序,对于数组中的每一个数i,设置左右指针j,k分别指向其后面的一个数和数组最后一个数,当j<k时,求数i,j,k三者之和,如果其和target相等,直接返回target。如果其和target差值更小,更新最终的返回值。如果sum比target更大, 则j向左移动一位,反之,则sum比target更小,则j向右移动一位。最终返回和target差值最小的那个sum。
    1. class Solution {
      public:
          int threeSumClosest(vector<int>& nums, int target) {
              sort(nums.begin(),nums.end());
              int min=INT_MAX;
              int ret;
              for(int i=0;i<nums.size();i++){
                 int j=i+1;
                 int k=nums.size()-1;
                 while(j<k){
                     int sum=nums[i]+nums[j]+nums[k];
                     int dif=abs(sum-target);
                     if(dif<min){
                         min=dif;
                         ret=sum;
                     }
                     if(dif==0)
                      return target;
                     else if(sum>target)
                      k--;
                     else
                      j++;
                 }
              }
              return ret;
          }
      };
  • 相关阅读:
    Login
    2Sum,3Sum,4Sum,kSum,3Sum Closest系列
    Word Search II
    Word Search
    Linux命令四
    linux命令三
    Linux命令二
    Linux命令一
    网络基础
    操作系统
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5043019.html
Copyright © 2011-2022 走看看