1. <?php
    2. class Solution {
    3. /**
    4. * nums = [-1, 2, 1, -4]
    5. * target = 1
    6. * closest = 2
    7. * @param $nums
    8. * @param $target
    9. * @return array|mixed
    10. */
    11. public function threeSumClosest($nums, $target) {
    12. if (!$nums) return [];
    13. sort($nums);
    14. $closest = $nums[0] + $nums[1] + $nums[2];
    15. for ($i = 0; $i < count($nums) - 2; $i++) {
    16. // 前后指针
    17. $left = $i + 1;
    18. $right = count($nums) - 1;
    19. while ($left < $right) {
    20. $sum = $nums[$i] + $nums[$left] + $nums[$right];
    21. if ($sum > $closest) {
    22. $right--;
    23. } else {
    24. $left++;
    25. }
    26. if (abs($sum - $target) < abs($closest - $target)) {
    27. $closest = $sum;
    28. }
    29. }
    30. }
    31. return $closest;
    32. }
    33. }
    34. $nums = [-1, 2, 1, -4];
    35. $cls = new Solution();
    36. $r = $cls->threeSumClosest($nums, 1);
    37. print_r($r);