翻译
给定一个有 n 个整数的数组 S,找出 S 中 3 个数,使其和等于一个给定的数,target。
返回这 3 个数的和,你可以假定每个输入都有且只有一个结果。
例如,给定 S = {-1 2 1 -4},和 target = 1。
那么最接近 target 的和是 2。(-1 + 2 + 1 = 2)。
原文
Given an array S of n integers,
find three integers in S such that the sum is closest to a given number, target.
Return the sum of the three integers.
You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
思考
也许我已经开始体会到上一题中别人写的方法的思想了。
在这个题目中,我们要做以下几件事:
- 用 sort 对输入的数组进行排序
- 求出长度 len,current 之所以要小于 len−2,是因为后面需要留两个位置给 front 和 back
- 始终保证 front 小于 back
- 计算索引为 current、front、back 的数的和,分别有比 target 更小、更大、相等三种情况
- 更小:如果距离小于 close,那么close 便等于 target−sum,而结果就是 sum。更大的情况同理
- 如果相等,那么要记得将 0 赋值给 close,result 就直接等于 target 了
- 随后为了避免计算重复的数字,用三个 do/while 循环递增或递减它们