3Sum Closest

来源:互联网 发布:excel的数据分析工具 编辑:程序博客网 时间:2024/05/30 05:12

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

算法:固定第一个,另外两个数适用双指针。O(N^2)


java:

public class Solution {    public int threeSumClosest(int[] num, int target) {        int len=num.length;                int distance=Integer.MAX_VALUE;        int sum=0;        Arrays.sort(num);                for(int i=0;i<len-2;i++){            int s=i+1;            int e=len-1;            while(s<e){                int cnt= num[i]+num[s]+num[e];                int dis = Math.abs(target-cnt);                               if(dis<=distance){                    sum=cnt;                    distance=dis;                    if(sum==target){                        return sum;                    }else if(sum<target){                        s++;                    }else {                        e--;                    }                }else if(cnt<target){                    s++;                }else{                    e--;                }            }        }        return sum;    }}


c++:

class Solution {public:    int threeSumClosest(vector<int> &num, int target) {        int size=num.size();        sort(num.begin(),num.end());        int close=0;        int dis=INT_MAX;        for(int i=0;i<size-2;i++){            int j=i+1;            int k=size-1;            while(j<k){                int sum=num[i]+num[j]+num[k];                if(abs(sum-target)<=dis){                    dis=abs(sum-target);                    close=sum;                    if(sum==target){                        return close;                    }else if(sum<target){                        j++;                    }else{                        k--;                    }                }else if(sum-target<0){                    j++;                }else{                    k--;                }            }        }        return close;    }};




0 0
原创粉丝点击