leetcode 18 4Sum
来源:互联网 发布:淘宝屏蔽黑名单在哪 编辑:程序博客网 时间:2024/04/27 02:09
4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
- The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)
类似于leetcode 15 3sum。采用类似的思路,O(n^3),超时。。
class Solution: def find(self,s,start,end,num): while start<=end: mid=(start+end)/2 if s[mid]==num: return True elif s[mid]>num: end=mid-1 else: start=mid+1 return False # @return a list of lists of length 3, [[val1,val2,val3]] def fourSum(self, num, target): a=sorted(num) l=len(a) lst=[] for i in range(l-3): if i>=1 and a[i-1]==a[i]: continue for j in range(i+1,l-2): if j!=i+1 and a[j]==a[j-1]: continue for k in range(j+1,l-1): if k!=j+1 and a[k]==a[k-1]: continue if self.find(a,k+1,l-1,target-a[i]-a[j]-a[k]): lst.append( [a[i],a[j],a[k],target-a[i]-a[j]-a[k]] ) return lst在此基础上优化:
增加一个字典缓存exist={},把每两个数的和都加入字典;如果target-a[i]-a[j]不在字典中,则不必继续查找。时间复杂度平均降到O(n^2)
def fourSum(self, num, target): a=sorted(num) l=len(a) lst=[] exist={} <span style="color:#ff6666;"> for i in range(l-1): for j in range(l): exist[a[i]+a[j]]=True</span> for i in range(l-3): if i>=1 and a[i-1]==a[i]: continue for j in range(i+1,l-2): if j!=i+1 and a[j]==a[j-1]: continue <span style="color:#ff0000;">if exist.get(target-a[i]-a[j],False):</span> for k in range(j+1,l-1): if k!=j+1 and a[k]==a[k-1]: continue if self.find(a,k+1,l-1,target-a[i]-a[j]-a[k]): lst.append( [a[i],a[j],a[k],target-a[i]-a[j]-a[k]] ) return lst
0 0
- LeetCode 18: 4Sum
- [leetcode 18] 4Sum
- [leetcode] 18 4Sum
- leetcode.18--------------4Sum
- leetcode 18 4Sum
- LeetCode---(18) 4 Sum
- LeetCode 18 - 4Sum
- LeetCode 18: 4Sum
- leetcode 18 -- 4Sum
- Leetcode[18]-4Sum
- leetcode-18 4Sum
- leetcode 18: 4Sum
- Leetcode#18 4Sum
- LeetCode(18) 4Sum
- LeetCode #18 4Sum
- Leetcode 18 4Sum
- LeetCode-18 4Sum
- Leetcode#18||4 Sum
- 微信平台开发API指南地址
- Caffe运行googlenet模型 matlab接口错误
- GNU Autotools的使用方法
- jQuery UI draggable+droppable+resizable+selectable+sortable
- 杭电ACM 2003: 求绝对值
- leetcode 18 4Sum
- C/C++产生随机数
- 程序堆栈
- 我的第一个发表
- mvn 创建项目只有 src target
- 各种分页语句
- Android自定义Toast
- 发工资之贪心 hdu2021
- 博客搬家至博客园