给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

请关注微信公众号“数据结构和算法”,答案下期公布

上期的问题是:71,三数之和

72,最接近的三数之和_数组

解析:

代码的第二行先对数组进行排序,这个排序是从小到大的,然后第5行有一行num[i]!=num[i-1],他是为了防止重复,举个例子,排序后的数组[-8,-1,-1,-1,2,5]那么他会从第一个-1开始找到[-1,-1,2]这组的和为0,如果没有上面那行代码,那么从第二个-1开始也可以找到[-1,-1,2],所以重复了。然后下面的就比较简单了,三数之和减去其中的一个,剩下的就是其他两个数的和了,因为是排过序的,所以这里是从两头开始往中间找,如果找到直接放到mList中,然后在找,如果小于sum,说明两数之和小了,所以lo++,因为这里是排过序的,从两头往中间找,所以lo只能加不能减,hi只能减不能加。同理当两数之和大于sum的时候,hi--。

关注,点赞,评论,转发