LeetCode(二)双指针-#16

16.最接近的三数之和

1.题目描述及示例

  1. 题目描述
    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
    注意:答案中不可以包含重复的三元组。
  2. 示例
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

2.题解思路及代码

  1. 题解思路
    同#15

  2. 代码

    public int threeSumClosest(int[] nums, int target) {
        int minAbs=100000000;
        int closeSum=0;
        Arrays.sort(nums);
        for (int i=0;i<nums.length-1;i++)
        {
                        
                        
            if(i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            
            int l=i+1,r=nums.length-1;
            while (l<r)
            {
                int offset,abs,result;
                result=nums[i]+nums[l]+nums[r];
                offset=result-target;
                abs=Math.abs(offset);

                if (abs<minAbs)
                {
                    minAbs=abs;
                    closeSum=result;
                }
                if (offset>0)
                {
                    r--;
                    while(l < r && nums[r] == nums[r + 1])
                        r--;
                }
                else
                {
                    l++;
                     while(l < r && nums[l] == nums[l - 1])
                        l++;
                }

            }
        }

        return closeSum;
    }
}

在这里插入图片描述

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页