16. 3Sum Closest
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 1:
Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).Constraints:
3 <= nums.length <= 10^3-10^3 <= nums[i] <= 10^3-10^4 <= target <= 10^4
# @lc code=start
using LeetCode
three_sum_closest(nums::Vector{Int}, target::Int) = three_sum_closest!(copy(nums), target)
function three_sum_closest!(nums::Vector{Int}, target::Int)::Int
mindiff, n, res = Inf, length(sort!(nums)), 0
for (i, first) in enumerate(nums)
i > 1 && nums[i - 1] == first && continue
left, right, newtarget = i + 1, n, target - first
while left < right
newsum = nums[left] + nums[right]
newdiff = abs(newsum - newtarget)
if newdiff < mindiff ## updates minimal difference
newdiff == 0 && return target
mindiff, res = newdiff, newsum + first
elseif newsum > newtarget
right -= 1
else
left += 1
end
end
end
return res
end
# @lc code=endthree_sum_closest! (generic function with 1 method)
This page was generated using DemoCards.jl and Literate.jl.