LeetCode-Array-最接近的三个数之和

题目描述:

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

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

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

方法:

双指针法:
  • 将数组进行排序,以便双指针的移动,此时排序时间复杂度为O(nlogn)
  • 通过第一层循环固定k,然后再将指针i=k+1;j=nums.length-1初始化
  • 如果在遍历的过程中,发现Math.abs(target-temp)<Math.abs(target-closeInteger),将closeInteger = temp;
  • 如果temp>target,j前移
  • 如果temp>target,i后移
  • 如果temp==target,证明已经找到直接返回temp;
  • 时间复杂度为:O(n^2)+O(nlogn)=O(n^2)

详细代码:

class Solution {
    
    
    public int threeSumClosest(int[] nums, int target) {
    
    
        Arrays.sort(nums);
        int closeInteger = nums[0]+nums[1]+nums[2];
        for(int k = 0 ;k<nums.length;k++){
    
    
            int i =k+1,j=nums.length-1;
            while(i<j){
    
    
                int temp = nums[i]+nums[j]+nums[k];
                if(Math.abs(target-temp)<Math.abs(target-closeInteger)){
    
    
                    closeInteger = temp;
                }
                if(temp>target) j--;
                else if(temp<target) i++;
                else return temp;
            }
        }
        return closeInteger;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41291067/article/details/102911467