代码改变世界

Leetcode - 要你命100-15. 3sum 解题报告

2017-09-29 09:46  Mux1  阅读(124)  评论(0编辑  收藏  举报

题目:

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate tripletsFor example, given array S = [-1, 0, 1, 2, -1, -4],

分析:

1. 这道题出自2sum的衍生, 但是做法相近, 有可取之处.

2. 主要是遍历整个array 找出元素的右边是否有两个数的和等于该元素的相反数. 

  case A(如果两个数的和小于该元素的相反数) 则左边的数太小, 往右挪一个

  case B(如果大于) 则右边的数字太大, 往左边挪一个

  *case C* (重要!) (相等?) 这个时候这道题的第一个tricky点就到了 如果找到了之后怎么办呢? 要注意到 如果有重复的数字在的话 result里面就会有重复的答案在里面, 所有要通过nums[low]和nums[low+1]的比较, nums[high]和nums[high-1]的比较来去重.

3. 之所以把这个点放在第三点是因为,看完上面两部就知道 这个做法最最基本的元素是把这个array排序, 所以这部应该在第二部之前就做好. 如果复盘的时候没有想到这一点, 那么应该反省

 

代码: