LeetCode 16. 最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2)。
PHP 代码:
方法一(暴力):
function threeSumClosest($nums, $target) { $ans = $nums[0] + $nums[1] + $nums[2]; for ($i = 0; $i < count($nums) - 2; ++ $i) { for ($j = $i + 1; $j < count($nums) - 1; ++ $j) { for ($k = $j + 1; $k < count($nums); ++ $k) { $temp = $nums[$i] + $nums[$j] + $nums[$k]; if (abs($temp - $target) < abs($ans - $target)) { $ans = $temp; } } } } return $ans; }
方法二(循环,双链表):
function threeSumClosest($nums, $target) { $ans = $nums[0] + $nums[1] + $nums[2]; sort($nums); for ($i = 0; $i < count($nums) - 2; ++ $i) { $j = $i + 1; $k = count($nums) - 1; while ($j < $k) { $sum = $nums[$i] + $nums[$j] + $nums[$k]; if (abs($sum - $target) < abs($ans - $target)) { $ans = $sum; } if ($sum < $target) { ++ $j; } elseif ($sum > $target) { -- $k; } else { return $target; } } } return $ans; }