Fork me on GitHub

LeetCode 16 3Sum Closest (最接近target的3个数之和)

 
 
Problem : 找到给定数组中a+b+c 最接近target的组合
 
类似求三个数之和为0的思路:每次更新求和的result值,利用函数Math.abs()判断绝对值最小的为result
 
参考代码:
package leetcode_50;

import java.util.Arrays;

/***
 * 
 * @author pengfei_zheng
 * 最接近target的三个数组合
 */
public class Solution16 {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);//排序操作
        int result = nums[0]+nums[1]+nums[nums.length-1];
        for(int i=0;i<nums.length-2;i++){//遍历
            int start = i+1,end = nums.length-1;
            while(start<end){//移动两端指针
                int sum = nums[i]+nums[start]+nums[end];
                if(sum>target)//移动end指针
                    end--;
                else start++;//移动start指针
                if(Math.abs(sum-target)<Math.abs(result-target))
                    result=sum;//更新result值
            }
        }
        return result;
    }
}

 

posted @ 2017-03-05 16:14  伊甸一点  阅读(267)  评论(0编辑  收藏  举报