Skip to content

Commit 9c60311

Browse files
authored
Merge pull request #31 from LetMeFly666/1726
添加了问题“1726. 同积元组”的代码和题解
2 parents a2afeb7 + 992b710 commit 9c60311

File tree

4 files changed

+142
-0
lines changed

4 files changed

+142
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2023-10-19 10:14:03
4+
* @LastEditors: LetMeFly
5+
* @LastEditTime: 2023-10-19 10:15:30
6+
*/
7+
#ifdef _WIN32
8+
#include "_[1,2]toVector.h"
9+
#endif
10+
11+
class Solution {
12+
public:
13+
int tupleSameProduct(vector<int>& nums) {
14+
unordered_map<int, int> ma;
15+
for (int i = 0; i < nums.size(); i++) {
16+
for (int j = i + 1; j < nums.size(); j++) {
17+
ma[nums[i] * nums[j]]++;
18+
}
19+
}
20+
int ans = 0;
21+
for (auto&& [k, v] : ma) {
22+
ans += v * (v - 1) * 4;
23+
}
24+
return ans;
25+
}
26+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'''
2+
Author: LetMeFly
3+
Date: 2023-10-19 10:16:10
4+
LastEditors: LetMeFly
5+
LastEditTime: 2023-10-19 10:18:40
6+
'''
7+
from collections import Counter
8+
from typing import List
9+
10+
class Solution:
11+
def tupleSameProduct(self, nums: List[int]) -> int:
12+
return sum([v * (v - 1) * 4 for _, v in Counter([nums[i] * nums[j] for i in range(len(nums)) for j in range(i + 1, len(nums))]).items()])

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ int main() {
413413
|1700.无法吃午餐的学生数量|简单|<a href="https://leetcode.cn/problems/number-of-students-unable-to-eat-lunch/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/10/19/LeetCode%201700.%E6%97%A0%E6%B3%95%E5%90%83%E5%8D%88%E9%A4%90%E7%9A%84%E5%AD%A6%E7%94%9F%E6%95%B0%E9%87%8F/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/127402719" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/number-of-students-unable-to-eat-lunch/solution/letmefly-1700wu-fa-chi-wu-can-de-xue-she-o9cn/" target="_blank">LeetCode题解</a>|
414414
|1704.判断字符串的两半是否相似|简单|<a href="https://leetcode.cn/problems/determine-if-string-halves-are-alike/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/11/11/LeetCode%201704.%E5%88%A4%E6%96%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E4%B8%A4%E5%8D%8A%E6%98%AF%E5%90%A6%E7%9B%B8%E4%BC%BC/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/127799858" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/determine-if-string-halves-are-alike/solution/letmefly-1704pan-duan-zi-fu-chuan-de-lia-s75y/" target="_blank">LeetCode题解</a>|
415415
|1710.卡车上的最大单元数|简单|<a href="https://leetcode.cn/problems/maximum-units-on-a-truck/solutions/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/11/15/LeetCode%201710.%E5%8D%A1%E8%BD%A6%E4%B8%8A%E7%9A%84%E6%9C%80%E5%A4%A7%E5%8D%95%E5%85%83%E6%95%B0/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/127859337" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/maximum-units-on-a-truck/solutions/1971195/letmefly-1710qia-che-shang-de-zui-da-dan-v8l8/" target="_blank">LeetCode题解</a>|
416+
|1726.同积元组|中等|<a href="https://leetcode.cn/problems/tuple-with-same-product/solutions/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2023/10/19/LeetCode%201726.%E5%90%8C%E7%A7%AF%E5%85%83%E7%BB%84/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/133921549" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/tuple-with-same-product/solutions/2489115/letmefly-1726tong-ji-yuan-zu-ha-xi-biao-sxuu2/" target="_blank">LeetCode题解</a>|
416417
|1732.找到最高海拔|简单|<a href="https://leetcode.cn/problems/find-the-highest-altitude/solutions/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/11/19/LeetCode%201732.%E6%89%BE%E5%88%B0%E6%9C%80%E9%AB%98%E6%B5%B7%E6%8B%94/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/127932334" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/find-the-highest-altitude/solutions/1979474/letmefly-1732zhao-dao-zui-gao-hai-ba-by-gdbw2/" target="_blank">LeetCode题解</a>|
417418
|1739.放置盒子|困难|<a href="https://leetcode.cn/problems/building-boxes/solutions/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/12/25/LeetCode%201739.%E6%94%BE%E7%BD%AE%E7%9B%92%E5%AD%90/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/128436934" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/building-boxes/solutions/2032356/letmefly-1739fang-zhi-he-zi-by-tisfy-k219/" target="_blank">LeetCode题解</a>|
418419
|1742.盒子中小球的最大数量|简单|<a href="https://leetcode.cn/problems/maximum-number-of-balls-in-a-box/solutions/" target="_blank">题目地址</a>|<a href="https://blog.tisfy.eu.org/2022/11/23/LeetCode%201742.%E7%9B%92%E5%AD%90%E4%B8%AD%E5%B0%8F%E7%90%83%E7%9A%84%E6%9C%80%E5%A4%A7%E6%95%B0%E9%87%8F/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/127994569" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/maximum-number-of-balls-in-a-box/solutions/1986581/letmefly-1742he-zi-zhong-xiao-qiu-de-zui-k5t1/" target="_blank">LeetCode题解</a>|
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
title: 1726.同积元组
3+
date: 2023-10-19 10:21:24
4+
tags: [题解, LeetCode, 中等, 数组, 哈希表, 哈希, map]
5+
---
6+
7+
# 【LetMeFly】1726.同积元组:哈希表(组合数学)
8+
9+
力扣题目链接:[https://leetcode.cn/problems/tuple-with-same-product/](https://leetcode.cn/problems/tuple-with-same-product/)
10+
11+
<p>给你一个由 <strong>不同</strong> 正整数组成的数组 <code>nums</code> ,请你返回满足&nbsp;<code>a * b = c * d</code> 的元组<em> </em><code>(a, b, c, d)</code><em> </em>的数量。其中 <code>a</code>、<code>b</code>、<code>c</code> 和 <code>d</code> 都是 <code>nums</code> 中的元素,且 <code>a != b != c != d</code> 。</p>
12+
13+
<p>&nbsp;</p>
14+
15+
<p><strong>示例 1:</strong></p>
16+
17+
<pre>
18+
<strong>输入:</strong>nums = [2,3,4,6]
19+
<strong>输出:</strong>8
20+
<strong>解释:</strong>存在 8 个满足题意的元组:
21+
(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)
22+
(3,4,2,6) , (4,3,2,6) , (3,4,6,2) , (4,3,6,2)
23+
</pre>
24+
25+
<p><strong>示例 2:</strong></p>
26+
27+
<pre>
28+
<strong>输入:</strong>nums = [1,2,4,5,10]
29+
<strong>输出:</strong>16
30+
<strong>解释:</strong>存在 16 个满足题意的元组:
31+
(1,10,2,5) , (1,10,5,2) , (10,1,2,5) , (10,1,5,2)
32+
(2,5,1,10) , (2,5,10,1) , (5,2,1,10) , (5,2,10,1)
33+
(2,10,4,5) , (2,10,5,4) , (10,2,4,5) , (10,2,4,5)
34+
(4,5,2,10) , (4,5,10,2) , (5,4,2,10) , (5,4,10,2)
35+
</pre>
36+
37+
<p>&nbsp;</p>
38+
39+
<p><strong>提示:</strong></p>
40+
41+
<ul>
42+
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
43+
<li><code>1 &lt;= nums[i] &lt;= 10<sup>4</sup></code></li>
44+
<li><code>nums</code> 中的所有元素 <strong>互不相同</strong></li>
45+
</ul>
46+
47+
48+
49+
## 方法一:哈希表(组合数学)
50+
51+
本题的数据量为$10^3$,大约可以在$O(n^2)$的时间复杂度内解决。
52+
53+
因此我们只需要预先两层遍历一下nums数组,将所有的两数之积出现的次数统计出来并放入哈希表中。这样,对于两数之积$k$,我们可以通过哈希表在$O(1)$的时间复杂度内得到两数之积为$k$的数对的个数。
54+
55+
最后就是组合数学的问题了。对于两数之积$k$,有多少个$(a,b,c,d)$使得$a\times b=k=c\times d\ ①$呢?
56+
57+
> 假设有$v$个“两数之积”等于$k$,那么我们可以先从这$v$个数对中选出两个($A_v^2$),分别放在等式$①$的左边和右边($a_1\times b_1=a_2\times b_2$)。然后对于$a_1$和$b_1$,有两种顺序($(a_1, b_1)$和$(b_1, a_1)$),$a_2,b_2$也有两种顺序。也就是说,对于$a_1\times b_1=a_2\times b_2$,一共有$2\times2=4$种顺序($a_1,b_1,a_2,b_2$、$b_1,a_1,a_2,b_2$、$a_1,b_1,b_2,a_2$、$b_1,a_1,b_2,a_2$)。
58+
>
59+
> 也就是说,如果有$v$个两数之积等于$k$,那么有$A_v^2\times 4$种“```(a, b, c, d)```”四元组使得$a\times b=c\times d$。
60+
61+
对于所有的$k$,累加上式即可。
62+
63+
+ 时间复杂度$O(len(nums)^2)$
64+
+ 空间复杂度$O(len(nums)^2)$
65+
66+
### AC代码
67+
68+
#### C++
69+
70+
```cpp
71+
class Solution {
72+
public:
73+
int tupleSameProduct(vector<int>& nums) {
74+
unordered_map<int, int> ma;
75+
for (int i = 0; i < nums.size(); i++) {
76+
for (int j = i + 1; j < nums.size(); j++) {
77+
ma[nums[i] * nums[j]]++;
78+
}
79+
}
80+
int ans = 0;
81+
for (auto&& [k, v] : ma) {
82+
ans += v * (v - 1) * 4;
83+
}
84+
return ans;
85+
}
86+
};
87+
```
88+
89+
#### Python
90+
91+
皮一下:
92+
93+
```python
94+
# from collections import Counter
95+
# from typing import List
96+
97+
class Solution:
98+
def tupleSameProduct(self, nums: List[int]) -> int:
99+
return sum([v * (v - 1) * 4 for _, v in Counter([nums[i] * nums[j] for i in range(len(nums)) for j in range(i + 1, len(nums))]).items()])
100+
```
101+
102+
> 同步发文于CSDN,原创不易,转载经作者同意后请附上[原文链接](https://blog.tisfy.eu.org/2023/10/19/LeetCode%201726.%E5%90%8C%E7%A7%AF%E5%85%83%E7%BB%84/)哦~
103+
> Tisfy:[https://letmefly.blog.csdn.net/article/details/133921549](https://letmefly.blog.csdn.net/article/details/133921549)

0 commit comments

Comments
 (0)