集册 LeetCode 题解 16.3 Sum Closest(最接近的 3 个数的和)

16.3 Sum Closest(最接近的 3 个数的和)

—— 3 Sum Closest(最接近的 3 个数的和)

欢马劈雪     最近更新时间:2020-08-04 05:37:59

154

翻译

给定一个有 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 循环递增或递减它们

代码

展开阅读全文