Leetcode ——16. 3Sum Closest

解题思路

这个题于15题类似,15题是要找到三个数相加等于0,这个题是要找到最接近目标
三的个数之和

首先要对数组进行排序,然后采用三个指针的形式对数组进行查找,通过两层for循环,一层for循环,将三个指针变为2个指针。最后可以比较两个指针所指向位置的元素和于目标的和进行比较即可

AC代码

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int sum = nums[0] + nums[1] + nums[nums.length - 1];
        Arrays.sort(nums);
        int min = sum - target;
        for(int left = 0; left < nums.length; left++) {

            int right = nums.length - 1;
            int medium = left + 1;

            while(medium < right) {
                sum = nums[left] + nums[right] + nums[medium];

                if(Math.abs(sum - target) < Math.abs(min))
                    min = sum - target;

                if(sum == target)
                    return sum;
                else if(sum < target)
                    medium ++;
                else
                    right --;
            }


        }
        //System.out.println(min);
        return min + target;        
    }
}

猜你喜欢

转载自blog.csdn.net/xiaojie_570/article/details/80311654