You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Java嵌套循环,实现整数列表匹配对统计时间复杂度降至O(n)

优化方案

存在O(n)时间复杂度的实现方案,核心思路是先统计每个整数的出现频次,再通过组合数公式直接计算每个整数贡献的匹配对数,最终求和得到总匹配数。

实现原理

如果某个整数在列表中一共出现了k次,那么它能形成的两两不重复匹配对的数量为组合数 C(k,2) = k*(k-1)/2,无需嵌套遍历即可直接计算该值。

Java 实现代码

import java.util.HashMap;

int[] arr = new int[n];
int total = 0;
// 用HashMap统计每个数字的出现频次
HashMap<Integer, Integer> countMap = new HashMap<>();
for (int num : arr) {
    countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
// 遍历频次计算总匹配数
for (int count : countMap.values()) {
    total += count * (count - 1) / 2;
}

复杂度说明

  • 时间复杂度:仅需两次线性遍历,整体为O(n)
  • 空间复杂度:需要额外的哈希表存储频次,最坏情况(所有元素都不重复)下为O(n),属于空间换时间的常规优化,在n较大时性能收益远高于原有O(n²)实现。

内容的提问来源于stack exchange,提问作者Gbeck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:12:01