leetcode打卡第一天

给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :
nums[a] + nums[b] + nums[c] == nums[d] ,且
a < b < c < d
链接:1995.统计特殊四元组
解题思路:
暴露破解一:

class Solution {
public:
    int countQuadruplets(vector<int>& nums) {
        int n= nums.size();
        int s=0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++)
                for(int k=j+1;k<n;k++){
                    int sum=nums[i]+nums[j]+nums[k];
                    for(int z=k+1;z<n;z++){
                        if(sum==nums[z]) s++;
                    }
                }
        }
        return s;
    }
};

使用哈希表进行保存c后面d的个数:
nums[a]+nums[b]+nums[c]=nums[d]
a<b<c<d

class Solution {
public:
    int countQuadruplets(vector<int>& nums) {
        int n= nums.size();
        int s=0;
        unordered_map<int,int>ma;
        //统计2~n-1,中间数字的个数,C的枚举也是从后往前面推
        //C只能从n-2开始取,n-1是属于D        
        for(int i=n-2;i>=2;i--){
            ma[nums[i+1]]++;//这里也就是统计d范围之内数的个数
        for(int j=0;j<i;j++){
            for(int k=j+1;k<i;k++){
                int su=nums[i]+nums[j]+nums[k];
                s+=ma[su];
            }
        }
    }
        return s;
    }
};

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>