[LeetCode]16. 3Sum Closest最接近的三數之和
阿新 • • 發佈:2019-01-07
Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
這題要求找出三個數的和跟target最接近的,可以跟之前的三數之和類似的方法來處理,同樣先確定一個數後再對剩下的兩個數使用雙指標法
每次根據結果與target的比較結果判斷移動頭指標還是尾指標,這裡注意結果大於target也可能小於target所以要做絕對值的判斷
class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int closestNum = nums[0] + nums[1] + nums[2]; for (int i = 0; i < nums.length - 2; i++) { int l = i + 1, r = nums.length - 1; while (l < r){int threeSum = nums[l] + nums[r] + nums[i]; if (Math.abs(threeSum - target) < Math.abs(closestNum - target)) { closestNum = threeSum; } if (threeSum > target) { r--; } else if (threeSum < target) { l++; } else { return target; } } } return closestNum; } }