LeetCode 4sum

来源:互联网 发布:淘宝客服是干什么的 编辑:程序博客网 时间:2024/06/16 19:44

链接:https://oj.leetcode.com/problems/4sum/


一种方法是跟3sum一样,使用头尾指针交替移动,时间复杂度为O(n3),空间复杂度为O(1),注意去重

class Solution{public:vector<vector<int> >fourSum(vector<int> &num,int target){vector<vector<int> > ans;sort(num.begin(),num.end());int n=num.size();for(unsigned int i=0;i<n;i++){    if(i > 0 && num[i] == num[i-1])                    continue;for(unsigned int j=i+1;j<n;j++){    if(j > i + 1 && num[j] == num[j-1])                        continue;int st=j+1,en=n-1;while(st<en){    if(st>j+1&&num[st]==num[st-1])    {        st++;        continue;    }    if(en<n-1&&num[en]==num[en+1])    {        en--;        continue;    }int sum=num[i]+num[j]+num[st]+num[en];if(sum>target)en--;if(sum<target)st++;if(sum==target){vector<int> tem;tem.push_back(num[i]);tem.push_back(num[j]);tem.push_back(num[st]);tem.push_back(num[en]);ans.push_back(tem);tem.clear();st++;en--;}}}}return ans;}};


还有一种比较高效的方法是牺牲空间复杂度去换取时间复杂度:

使用哈希表储存所有元素两两的和,然后在做一次2sum.

而且,2sum是有线性算法的:把所有元素放如哈希表中,通过哈希表判断target-num是否存在,因为利用了哈希表,所以每次判断只需常数级的时间。

去重的话,可以考虑set

0 0
原创粉丝点击