【每日一题Day352】LC1726同积元组 | 哈希表+排列组合

简介: 【每日一题Day352】LC1726同积元组 | 哈希表+排列组合

同积元组【LC1726】

给你一个由 不同 正整数组成的数组 nums ,请你返回满足 a * b = c * d 的元组 (a, b, c, d) 的数量。其中 abcd 都是 nums 中的元素,且 a != b != c != d思路

求出所有二元组的积及其出现次数,假设某个积出现的次数为a,那么其对应的组合数有

image.png

  • 由于题意求的是排列数,即两个二元组顺序可以交换,二元组内部顺序也可以交换,那么最后的排列数还需要乘以8
  • 实现
    使用哈希表存储每个二元组对应的出现次数,在统计次数的同时求出排列数
class Solution {
    public int tupleSameProduct(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        int n = nums.length, res = 0;
        for (int i = 0; i < n; i++){
            for (int j = i + 1; j < n; j++){
                int p = nums[i] * nums[j];
                int count = map.getOrDefault(p, 0);
                res += count * 8;
                map.put(p, map.getOrDefault(p, count) + 1);
            }
        }
        return res;
    }
}

复杂度

时间复杂度:O(n^2)

空间复杂度:O ( n )

目录
相关文章
|
9月前
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
34 0
|
9月前
|
机器学习/深度学习
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
50 0
|
9月前
|
存储
【每日一题Day158】LC2395和相等的子数组 | 哈希表
【每日一题Day158】LC2395和相等的子数组 | 哈希表
44 0
|
9月前
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
74 0
【每日一题Day48】LC1805字符串中不同整数的数目 | 双指针+哈希表
思路:使用双指针定位字符串中整数的起始位置和结束位置,去除前导0后,将该整数放入哈希表中,最后返回哈希表的大小即可。
93 0
|
9月前
【每日一题Day252】LC1两数之和 | 哈希表
【每日一题Day252】LC1两数之和 | 哈希表
45 0
|
9月前
|
API 索引
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
63 0
|
9月前
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
69 1
|
9月前
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
50 0
【每日一题Day49】LC1775通过最少操作数使数组和相等 | 贪心 + 哈希表 + 双指针
为了快速获得数组nums1和nums2的最大值和最小值,可以使用哈希表统计每个数字出现的次数map1、map2,倒序遍历map1获得max1,正序遍历map2获得min2【也可以将数组排序】
82 0

热门文章

最新文章