【leetcode】3SUM python实现
2016-06-03 13:08
375 查看
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:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},
暴力法应该是O(N3),的时间复杂度,初步估计最少也需要O(N2)的时间复杂度,所以先排序(O(Nlog(N))),从小到大,然后到正数的时候停下。
参考之前的twoSum,相当于是遍历一遍,然后对每个遍历的Si,以−Si为target,往后找twoSum.
代码如下:
Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},
A solution set is: (-1, 0, 1) (-1, -1, 2)
暴力法应该是O(N3),的时间复杂度,初步估计最少也需要O(N2)的时间复杂度,所以先排序(O(Nlog(N))),从小到大,然后到正数的时候停下。
参考之前的twoSum,相当于是遍历一遍,然后对每个遍历的Si,以−Si为target,往后找twoSum.
代码如下:
class Solution(object): def threeSum(self, nums): nums = sorted(nums) res = [] if len(nums)<3: return [] for y in xrange(len(nums)): if nums[y]>0: break if y > 0 and nums[y] == nums[y-1]: continue res = self.twoSum(nums,-nums[y], y, res) return res def twoSum(self, nums, target, y, res): dict={} for i in xrange(len(nums)): if y >=i: continue x=nums[i] if target-x in dict: mlist = sorted([target-x, x, nums[y]]) if mlist in res: continue res.append(mlist) continue dict[x]=i return res
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解