LeetCode刷题-16.最接近的三数之和
题目链接:16.最接近的三数之和
¶题解:
嗯,也是双指针,和LeetCode的第15题(也就是我的上一篇文章的题解基本类似)。
¶题目简述:
上一题求三数字和为0, 这一题求三数之和最接近!
¶题解:
和上一题类似,求为0的三元组每次只有一种情况,即nums[i] + nums[j] + nums[k]
但是求最接近则有两种(左和右):nums[i] + nums[j] + nums[k] - target
,nums[i] + nums[j] + nums[k + 1] - target
思路是一样的,同样是双指针!思路见上一篇题解,即第15题 三数之和!
本题此题不需要去重,最终结果也只有一个!
同样需要排序!
不同之处:
nums[i] + nums[j] + nums[k] > target
时,就k--
,找到最接近的位置- 若
k + 1
没有超界,则计算一下nums[i] + nums[j] + nums[k + 1]
的情况(右边) - 还有左边的情况(一定不会超界)
- 使用
minv
更新与目标值相差最小的差值,即最接近值,若minv
发生了更新,则更新res
的值为差值较小的一方。
初始值minv,t1,t2
都初始化为极大值INT_MAX
。
注意: 差值计算需要使用绝对值abs()
,同样while
内的条件j < k - 1
也得保证k--
不会越界。
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论