3sum 4sum

Paste_Image.png

思路:

  1. 对数据进行排序
    2)为了得到非重复的三元组 不断移动哨兵位置
    时间复杂度为O(n*n)
    对于4 sum问题 其时间复杂度为O(n^3)
vector<vector<int>> threeSum(vector<int>& nums) {
      
      vector<vector<int>> res;
      if(nums.size()<3)
      return res;
      sort(nums.begin(),nums.end());
      int left,right;
      for(int i=0;i<nums.size()-2;i++)
      {
          left=i+1;right=nums.size()-1;
          int target=0-nums[i]; 
          while(left<right)
          {
              int temp=nums[left]+nums[right];
              if(temp==target)
              {
                  vector<int> hh={nums[i],nums[left],nums[right]};
                  //sort(hh.begin(),hh.end());
                  res.push_back(hh);
                  while(nums[left]==hh[1]&&left<right)
                  left++;
                  while(nums[left]==hh[1]&&left<right)
                  right--;
                  continue;
              }
              if(temp>target)
              {
                  right--;
                  continue;
              }
              if(temp<target)
              {
                  left++;
                  continue;
              }
          }
          //理解为什么要这样去除重复数据
          while (i + 1 < nums.size() && nums[i + 1] == nums[i]) 
            i++;
      }
    
      return res;
    }
Paste_Image.png

思路:
1)将数据分为前后两部分
2)C、D数组数据相加后添加到unordered_map中,map键为和,值为个数
时间复杂度:O(n*n)

 int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
        int N=A.size();
        vector<int> dt;
        for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        dt.push_back(A[i]+B[j]);
        //将4个数组分为两部分,dt存储前一部分
        //kk 存储寻找的数据 使用键作为数据 值作为数据的个数
        unordered_map<int,int> kk;
        for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        kk[C[i]+D[j]]++;
        int res=0;
        for(int i=0;i<dt.size();i++)
        {
            if(kk.find(0-dt[i])!=kk.end())
            res+=kk.find(0-dt[i])->second;
        }
        return res;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,235评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,747评论 0 15
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 2,319评论 0 35
  • 1. 如约,闹钟准点响起,我这个起床困难户被这不依不饶的时间给说服了。给小家伙喂好早餐还得哄睡着,终于,时间到了七...
    远山近水_阅读 191评论 0 0