[M哈希] lc1726. 同积元组(哈希+计数+周赛224_2)

1. 题目来源

链接:1726. 同积元组

2. 题目解析

计数问题。没看清题,一直再考虑怎么去重,结果题目要求无重复元素…周赛颇为不顺。
在这里插入图片描述
思路:

  • 哈希表记录所有乘积出现的次数。
  • 乘积出现 k 次,则可构成 8 × C k 2 8 \times C_k^2 8×Ck2 的同积元组。其中 C k 2 = k ( k − 1 ) 2 C_k^2=\frac {k(k-1)} 2 Ck2=2k(k1)
  • 针对每个乘积求对应的同积元组数量即可。

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n ) O(n) O(n)

代码:

class Solution {
    
    
public:
    int tupleSameProduct(vector<int>& nums) {
    
    
        int n = nums.size();
        unordered_map<int, int> hash;
        for (int i = 0; i < n; i ++ ) 
            for (int j = i + 1; j < n; j ++ ) 
                hash[nums[i] * nums[j]] ++ ;
        int res = 0;
        for (auto& [p, k] : hash) 
            res += k * (k - 1) / 2 * 8;
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/112769718