zoukankan      html  css  js  c++  java
  • LeetCode之3SumClosest

    题目:

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

    分析:题目大意是给定一个整型数组,要求求出其中三个数相加的结果与给定的目标值最接近。返回这个值。  还是和上一题差不多,重要的在于定界。

    代码:

    #include "stdafx.h"
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    class Solution{
    public:
    	int threeSumClosest(vector<int>& num, int target) {
    		int min_gap = INT_MAX;
    		int result = 0;
    		sort(num.begin(),num.end());
    		auto last = num.end();
    		int sum,gap;
    		for(auto i = num.begin();i < last-2;++i){
    			auto j = next(i);
    			auto k = prev(last);
    			while(j<k){
    				sum = *i + *j + *k;
    				gap = abs(sum - target); //取绝对值
    				if (min_gap > gap){
    					min_gap = gap;
    					result = sum;
    				}
    
    				if (sum > target)
    					--k;
    				else
    					++j;
    			}			
    		}
            return result;
    	}
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	vector<int> v1;
    	int rtn;
    	v1.push_back(-1);
    	v1.push_back(1);
    	v1.push_back(2);
    	v1.push_back(-4);
    
    	Solution s;
    	rtn = s.threeSumClosest(v1, 1);
    	cout << rtn << endl;
    	
    	system("pause");
    	return 0;
    }
    

    生命不止,奋斗不息!
  • 相关阅读:
    软件工程第三次作业
    软件工程第一次作业
    软件工程第0次作业
    第2次作业
    第1次作业
    第0次作业
    软件工程第四次作业 石墨文档IOS
    软件工程第三次作业
    软件工程第一次作业
    第零次作业
  • 原文地址:https://www.cnblogs.com/huzongzhe/p/6735180.html
Copyright © 2011-2022 走看看