C++ 实现:计算给定序列中元素互不相同的三元组数量
要解决这个问题,我们可以使用组合数学的方法来计算满足条件的三元组数量。具体步骤如下: 1. 首先计算所有可能的三元组的总数。 2. 然后减去那些不满足条件的三元组(即存在至少两个元素相同的情况)。 代码实现 ```cpp #include <iostream> #include <vector> #include <unordered_map> using namespace std; long long countValidTriplets(const vector<int>& A) { int n = A.size(); unordered_map<int, int> freq; // 统计每个元素的频率 for (int num : A) { freq[num]++; } // 计算所有可能的三元组总数 long long total = (long long)n * (n - 1) * (n - 2) / 6; // 计算不满足条件的三元组数量 long long invalid = 0; for (auto& pair : freq) { int count = pair.second; if (count >= 2) { invalid += (long long)count * (count - 1) / 2 * (n - count); } if (count >= 3) { invalid += (long long)count * (count - 1) * (count - 2) / 6; } } // 返回满足条件的三元组数量 return total - invalid; } int main() { vector<int> A = {1, 2, 2, 3, 4}; cout << "Number of valid triplets: " << countValidTriplets(A) << endl; return 0; } ``` 代码解释 1. 统计频率:我们使用一个 `unordered_map` 来统计每个元素在序列中出现的次数。 2. 计算总数:所有可能的三元组总数为 `C(n, 3)`,即 `n * (n - 1) * (n - 2) / 6`。 3. 计算无效三元组: - 对于每个元素,如果它出现了至少两次,那么包含它的三元组中至少有两个元素相同。 - 如果元素出现了至少三次,那么包含它的三元组中所有三个元素都相同。 4. 返回结果:满足条件的三元组数量为总数减去无效三元组的数量。 额外需要注意的逻辑点 - 确保 `n` 大于等于 3,否则没有有效的三元组。 - 注意 `long long` 类型的使用,避免整数溢出。 - 在处理频率时,确保 `unordered_map` 的键类型与序列元素类型一致。 ######[AI写代码神器 | 561点数解答 | 2025-02-10 16:51:50]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)258
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)253
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)70
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)299
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)374
- Python开发必备:字符串、列表、元组、字典常用的5个方法大揭秘!(阿里通义 | 325点数解答 | 2023-11-08 00:51:48)270
- C++实现:计算n个正整数中小于x的数的总和(字节豆包 | 341点数解答 | 2025-08-02 21:52:19)288
- C++ 实现:计算 n 个正整数中小于 x 的数的总和及代码详解(字节豆包 | 377点数解答 | 2025-12-06 20:17:15)72
- Python 实现:计算给定 n 个正整数中小于 x 的数的总和(字节豆包 | 132点数解答 | 2025-12-21 11:35:39)69
- C++ 实现:计算 n 个正整数中小于 x 的数的总和(字节豆包 | 405点数解答 | 2025-12-21 11:36:07)55
- C++ 实现:计算 n 个正整数中小于 x 的数的总和(字节豆包 | 595点数解答 | 2026-01-24 22:53:05)52
- C++ 实现:计算 n 个正整数中小于 x 的数的总和(字节豆包 | 567点数解答 | 2026-01-24 23:00:47)48