最接近的三数之和(java实现)

题目:

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
看到这道题,我们能想到我之前发的一篇博客三数之和,思想和这个如出一辙。 所以这道题就照猫画虎,代码如下:
class Solution {
    public int threeSumClosest(int[] nums, int target) {
        if(nums.length == 0){
            return 0;
        }
        Arrays.sort(nums);
        int closenum = 0;
        int tp = Integer.MAX_VALUE;
        for(int i = 0;i < nums.length - 2;i++){
            int pre = i + 1;
            int tail = nums.length - 1;
            while(pre < tail){
                int tmp = nums[i] + nums[pre] + nums[tail];
                int x = Math.abs(tmp - target);
                if(tmp < tp){
                    closenum = tmp;
                    tp = x;
                }
                if(tp < target){
                    pre++;
                }else if(tp > target){
                    tail--;
                }else{
                    return tmp;
                }
            }
        }
        return closenum;
    }
}
 

猜你喜欢

转载自www.cnblogs.com/youdiaodaxue16/p/10750042.html