Leetcode - 要你命100-15. 3sum 解题报告
2017-09-29 09:46 Mux1 阅读(124) 评论(0) 编辑 收藏 举报题目:
Given an array S of n integers, are there elements a, b, c 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排序, 所以这部应该在第二部之前就做好. 如果复盘的时候没有想到这一点, 那么应该反省
代码: