【每日一题】同积元组

文章目录

Tag

【哈希表+组合】【数组】【2023-10-19】


题目来源

1726. 同积元组


题目解读

在一个由不同正整数组成的数组中找出满足 a * b = c * d 的四元组 (a, b, c, d),返回这样的四元组的数量。


解题思路

方法一:哈希表+组合

我可以先统计所有不同的乘积的数量,如果某一种乘积的数量 m 大于 1,那么可以从中拿出两个乘积(对应 4 个不同的数字)进行组合,每一种四元组内数字交换顺序后可以有 8 种四元组。那么,此时符合条件的四元组有:

C m 2 × 8 种 C_{m}^{2}\times 8种 Cm2×8种

最后,返回累加和即可。

实现代码

cpp 复制代码
class Solution {
public:
    int tupleSameProduct(vector<int>& nums) {
        unordered_map<int, int> cnts;
        int n = nums.size();
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                ++cnts[nums[i] * nums[j]];
            }
        }
        int res = 0;
        for (auto [_, cnt] : cnts) {
            if (cnt >= 2) {
                res += cnt * (cnt - 1) / 2 * 8;
            }
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( n 2 ) O(n^2) O(n2), n n n 为数组 nums 的长度。

空间复杂度: O ( k ) O(k) O(k), k k k 为不同的乘积数量。


其他语言

python3

python3 复制代码
class Solution:
    def tupleSameProduct(self, nums: List[int]) -> int:
        cnts = defaultdict(int)
        n = len(nums)
        for i in range(n):
            for j in range(i+1, n):
                cnts[nums[i] * nums[j]] += 1
        
        res = 0
        for _, val in cnts.items():
            if val >= 2:
                res += val * (val - 1) // 2 * 8
        return res

defaultdict 是 Python 中 collections 模块中的一个数据结构,它是 dict 的一个子类。defaultdict 的主要特点是允许你在创建字典时为所有键设置一个默认值,这意味着当你访问不存在的键时,它不会引发 KeyError,而会返回默认值。

在使用 defaultdict 之前通常需要引入库:

py 复制代码
from collections import defaultdict

代码中的 defaultdic(int) 表示创建一个 defaultdict,所有不存在的键默认值为0。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关推荐
ankleless5 天前
C语言(11)—— 数组(超绝详细总结)
c语言·零基础·数组·二维数组·自学·一维数组
梁辰兴7 天前
数据结构:串、数组与广义表
开发语言·数据结构·c··数组·广义表
没有bug.的程序员11 天前
《常见高频算法题 Java 解法实战精讲(1):链表与数组》
java·算法·链表·数组
意法半导体STM3222 天前
STM32CubeMX 生成时钟获取函数的分析
mcu·stm32cubemx·数组·st·意法半导体·hal 时钟获取函数
Alfred king22 天前
Leetcode 四数之和
算法·leetcode·职场和发展·数组·排序·双指针
Alfred king23 天前
面试150 不同路径Ⅱ
矩阵·动态规划·数组
SoveTingღ23 天前
【C语言】数组和指针一样吗?
c语言·unix·指针·数组·嵌入式软件
Alfred king1 个月前
面试150 搜索二维矩阵
线性代数·矩阵·二分查找·数组
Alfred king1 个月前
面试150 IPO
面试·职场和发展·贪心·数组··排序
Alfred king1 个月前
面试150 建立四叉树
矩阵··数组·分治