3Sum
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 triplets.
|
|
题解
题意很清晰,给一个数组,找出所有的和为0的三元组。(答案不允许有重复的三元组)
解题过程
第一版(stupid)
思路:拿到题的一瞬间,觉得很简单,把所有的都比较一次,然后对答案做排序及hash,重复的抛弃掉就行了
|
|
拿到LeetCode上一提交,我的天,最后几个测试用例跑了超久,最终Time Limit Exceeded
分析了一下,发现使用的算法太笨重了,与其说算法,不如说写了堆垃圾,遂重新分析了一下解题算法
第二版(better)
思路:第一版的算法复杂度达到了O(n^3),导致在测试用例大一些的时候,会超时;分析发现,我们可以先将整个数组进行排序,然后将最大最小值和他们区间内的数值进行比较,若等于0,则将结果记录起来,若小于0,则说明最大值过大,若大于0,则说明中间数值过小,通过这种方式,不断的缩小数值区间,最后可以得到结果,整体算法复杂度降低到了O(n^2)
O(n^2) => 中间数值缩小n次 * 最小值增大n次
|
|
经过验证,所有的测试用例都跑过了,看来以后遇到问题还是要多思考的^_^