leetcode16 3Sum Closest(java实现)

来源:互联网 发布:英菲克网络机顶盒 编辑:程序博客网 时间:2024/06/05 14:55

题目:

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

Subscribe to see which companies asked this question

主要题意:给出一组数字和一个目标数字,找出这组数字中三个数的和与目标数字最接近的那个和。

解题思路类似于leetcode15 3Sum,区别就在于将三个数之和为0的目标改为三个数之和与目标数字差的绝对值最小。

代码如下所示:

public class Solution {    public int threeSumClosest(int[] nums, int target) {        int n = nums.length;        int ans = Integer.MAX_VALUE;        int min = Integer.MAX_VALUE;        int sum ;        int curMin;        int p,q;        Arrays.sort(nums);        for(int i=0;i<n;i++){    if(i>0 && nums[i-1]==nums[i]) continue;    p=i+1;q=n-1;    while(p<q){    sum = nums[i]+nums[p]+nums[q];    curMin = Math.abs(target-sum);    if(sum==target){    return target;    }    else if(sum>target){    q--;    }    else{    p++;    }    if(curMin<min){    min=curMin;    ans=sum;    }         }        }        return ans;    }}



0 0