3Sum Closest

来源:互联网 发布:origin软件怎么安装 编辑:程序博客网 时间:2024/06/06 10:58

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匹配的值 而是要寻找最接近的 显然要全部遍历 与3sum思想差不多 将火速组排序后 先枚举第一个数 然后在它后面的区间里 用头尾指针确定剩余两数 代码如下:

public class Solution {    public int threeSumClosest(int[] num, int target) {        if(num.length<=2)return 0;        int res=0;        Arrays.sort(num);        boolean flag=true;        for(int i=0;i<num.length-2;i++){            int left=i+1;            int right=num.length-1;            while(left<right){                int sum=num[left]+num[right]+num[i];                if(flag==true){                    res=sum;                    flag=false;                }                else{                   if(Math.abs(sum-target)<Math.abs(res-target)){                       res=sum;                   }                }                if(sum<target){                    left++;                }                if(sum>target){                    right--;                }                if(sum==target){                    return target;                }            }        }        return res;    }}

0 0
原创粉丝点击