LeetCode 3Sum Closest

Posted 十目

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 3Sum Closest相关的知识,希望对你有一定的参考价值。

题意很明确,就取数列中每一个点,然后取数列两端边缘与选定点求和,如果比target大就舍弃最右边点,因为有它在和选定点加起来不可能更接近target了。同理比target小就舍弃最左边的店

import static java.lang.StrictMath.abs;
import java.util.Arrays;
class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int len = nums.length,sum = 0;
        if(len <= 3){
            for(int i = 0;i < len;i++) sum += nums[i];
            return sum;
        }
        sum = nums[0] + nums[1] + nums[2];
        Arrays.sort(nums);
        for(int i = 0;i < len;i++){
            if(i >= 1 && (nums[i] == nums[i-1])) continue;
            int gap2 = abs(target - sum);
            int l = i + 1,r = len - 1;
            while(l < r){
                if(gap2 > abs(target - nums[i] - nums[l] - nums[r])){
                    sum = nums[i] + nums[l] + nums[r];
                    gap2 = abs(target - sum);
                    if(sum == target) return sum;
                }
                if(target > nums[i] + nums[l] + nums[r]) l++;
                else r--;
            }
        }
        return sum;
    }
}

 

以上是关于LeetCode 3Sum Closest的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 16. 3Sum Closest

Leetcode3Sum Closest

Leetcode 16. 3Sum Closest

LeetCode16:3Sum Closest

leetcode 16 3Sum Closest

leetcode16 3Sum Closest