• Leetcode 16. 3Sum Closest


    16. 3Sum Closest

    • Total Accepted: 85780
    • Total Submissions: 289017
    • Difficulty: Medium

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

    思路:将序列升序排序后,设定ans等于a[0],a[1],a[2],然后用三个指针集i,j,k遍历有序序列,sum=a[i]+a[j]+a[k],如果sum>ans,就更新ans。每一轮特定i下关j,k都遍历完后,就比较ans是否等于target,如果等于就返回当前的a[i],a[j],a[k]。

    原来还想排序后找到最小的>=target的数A,然后得到由这个数递减的最大的<=target的数B。比较AB和target的接近程度,然后返回相应结果。

    代码:

     1 class Solution {
     2 public:
     3     int threeSumClosest(vector<int>& nums, int target) {
     4         int i,n=nums.size(),ans=0;
     5         if(n<=3){
     6             for(i=0;i<n;i++){
     7                 ans+=nums[i];
     8             }
     9             return ans;
    10         }
    11         sort(nums.begin(),nums.end());
    12         ans=nums[0]+nums[1]+nums[2];
    13         int sum,j,k;
    14         for(i=0;i<n;i++){
    15             j=i+1;
    16             k=n-1;
    17             while(j<k){
    18                 sum=nums[i]+nums[j]+nums[k];
    19                 if(abs(target-ans)>abs(target-sum)){
    20                     ans=sum;
    21                 }
    22                 sum>target?k--:j++;
    23             }
    24             if(ans==target) return ans;//优化
    25         }
    26         return ans;
    27     }
    28 };
  • 相关阅读:
    Redis 主从复制
    LESSON THREE
    SSIS OLEDB COMMAND RULES
    Hadoop step by step _ install and configuration environment
    repcached的安装练习
    Check list
    简单对象定位——xpath定位
    简单对象定位
    Python webdriver API- 浏览器的操作
    第一个自动化脚本示例
  • 原文地址:https://www.cnblogs.com/Deribs4/p/5698799.html
Copyright © 2020-2023  润新知