来源:数据结构和算法
给定一个包括n个整数的数组nums和一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组nums=[-1,2,1,-4],和target=1.与target最接近的三个数的和为2.(-1+2+1=2).
上期的问题是:71,三数之和
解析:
代码的第二行先对数组进行排序,这个排序是从小到大的,然后第5行有一行num!=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--。
预览时标签不可点收录于话题#个上一篇下一篇