• [array] leetCode-16. 3Sum Closest -Medium


    16. 3Sum Closest -Medium

    descrition

    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 最近的数,参看代码。

    code

    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <limits>
    
    using namespace std;
    
    class Solution{
    public:
    	int threeSumClosest(vector<int>& nums, int target){
    		sort(nums.begin(), nums.end()); // ascending
    
    		int min_gab = numeric_limits<int>::max();
    		int ans = target;
    
    		for(int i=0; i<nums.size(); i++){
    			int target_local = target - nums[i];
    			int ileft = i + 1;
    			int iright = nums.size() - 1;
    			while(ileft < iright){ // two pointer searching
    				int sum = nums[ileft] + nums[iright];
    				if(sum == target_local) // right answer
    					return target;
    				if(sum < target_local) // move ileft to increase sum
    					ileft++;
    				else // sum > target_local
    					iright--;
    
    				int gab = abs(sum - target_local);
    				if(gab < min_gab){
    					ans = sum + nums[i];
    					min_gab = gab;
    				}
    			}
    		}
    
    		return ans;
    
    	}
    };
    
    int main()
    {
    	return 0;
    }
    
    
  • 相关阅读:
    一个网站架构的变迁
    网络编程
    http协议篇
    第1篇 编程能力是什么
    django中的cookies和session机制
    django的认证与授权系统
    python的异常处理
    第0篇
    mysql优化和全局管理杂记
    k8s中pod的资源配置详解
  • 原文地址:https://www.cnblogs.com/fanling999/p/7828885.html
Copyright © 2020-2023  润新知