16. 最接近的三数之和Leetcode

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

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

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

/*
思路:(前面做过三数之和这道题了,用差不多的方法做这道题)
1、先排序
2、设diff为三数之和与target之间的差
3、有三数之和的方法对其进行遍历
*/
// class Solution {
//     public int threeSumClosest(int[] nums, int target) {

//         int min = Integer.MAX_VALUE;
//         int threeSum = 0;
//         Arrays.sort(nums);

//         for(int i = 0; i < nums.length-2; i++){
//             int j = i+1;
//             int k = nums.length-1;
//             int currentMin = 0;
//             //int currentThreeSum = 0;

//             while(j < k){

//                 int currentThreeSum = nums[i] + nums[j] + nums[k];
//                 int diff = nums[i] + nums[j] + nums[k] - target;


//                 if(diff < 0){
//                     currentMin = Math.abs(diff);
//                     j++;
//                 }else if(diff > 0){
//                     currentMin = Math.abs(diff);
//                     k--;
//                 }else if(diff == 0){
//                     return nums[i] + nums[j] + nums[k];
//                 } 

//                  if(currentMin < min){
//                  min = currentMin;
//                 threeSum = currentThreeSum;
//             }
//             }   

//         }
//         return threeSum;
//     }
// }


class Solution{
    public int threeSumClosest(int[] nums, int target){

        Arrays.sort(nums);
        int closestSum = 0;
        int diff = Integer.MAX_VALUE;

        for(int i = 0; i < nums.length-2; i++){

            int j = i + 1;
            int k = nums.length - 1;

            while(j < k){

                int temp_sum = nums[i] + nums[j] + nums[k];
                int temp_diff = Math.abs(temp_sum - target);

                if(temp_diff < diff){
                    diff = temp_diff;
                    closestSum = temp_sum;
                }
                if(temp_sum > target){
                    k--;
                }else if(temp_sum < target){
                    j++;
                }else{return temp_sum;}

            }
        }
        return closestSum;
    }
}

这道题很好的考察了变量的作用域

猜你喜欢

转载自blog.csdn.net/qq_32682177/article/details/82288163