15. 三数之和
https://leetcode-cn.com/problems/3sum/
解法一:
常规思路是用三个游标i,j,k遍历整个数组,找出所有的三三组合,看是否满足。然而这样会有重复。
改进:先排序,对每个找到的组合(i,j,k)各自往后搜寻,跳过相同的元素即可 有点借鉴two sum的做法,反向求之。i遍历整个数组,先设一个target=nums[i],令设两个游标front = i+1,back = len(nums)-1用这两个数的和与target比较,然后进行调整,直到找到为止。找到后跳过相等的数,防止重复。 此外还需注意,py的for循环与c++的for循环略有不同,主要是i不能在循环体中改变,(见https://blog.csdn.net/u012033124/article/details/80224024,第11条)因此对i的循环改成while语句
为何i的范围是0~n-1?不担心front=i+1越界?
因为有front < back限制。且其实i遍历到n-2就可以停止了。
最后更新于