LeetCode 10 最接近的三数之和

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

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

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

算法描述:先对数组进行排序,然后遍历一次数组,找出target对应数组所在的位置,定义left和right作为target的左右两个指针,比较left与right分别和target的差值,选取较小的那一个作为结果加在result上,对应的指针向左边或右边移动,循环比较三次,得到最终的结果。

  public static int ThreeSumClosest(int[] nums, int target)
        {
            nums = nums.OrderBy(a => a).ToArray();
            int ans = nums[0] + nums[1] + nums[2];
            for (int i = 0; i < nums.Length; i++)
            {
                int start = i + 1, end = nums.Length - 1;
                while (start < end)
                {
                    int sum = nums[start] + nums[end] + nums[i];
                    if (Math.Abs(target - sum) < Math.Abs(target - ans)) ans = sum;
                    if (sum > target) end--;
                    else if (sum < target) start++;
                    else return ans;
                }
            }
            return ans;
        }

测试用例:
LeetCode 10 最接近的三数之和_第1张图片
执行结果:
LeetCode 10 最接近的三数之和_第2张图片
LeetCode 10 最接近的三数之和_第3张图片

你可能感兴趣的:(LeetCode 10 最接近的三数之和)