
本文介绍如何在 java 中识别整数数组中满足“某数与其平方同在数组中”的配对关系,并输出所有有效配对及剩余未配对的孤立元素。
本文介绍如何在 java 中识别整数数组中满足“某数与其平方同在数组中”的配对关系,并输出所有有效配对及剩余未配对的孤立元素。
在处理数值关系类问题时,常需从一维数组中挖掘隐含的数学关联。本例要求:给定整型数组(如 {9, 4, 3, 2, 6, 1}),找出所有满足「存在 x 和 x² 同时出现在数组中」的数对(如 2 → 4、3 → 9),并单独列出无法构成此类关系的“未配对元素”(如 1 和 6)。
注意:此处的配对逻辑是单向依赖——以较小正整数 x 为基准,检查其平方 x² 是否也在数组中;x=1 时 1²=1,但题目示例将 1 判定为未配对,说明需排除 x == x²(即 x = 0 或 x = 1)的自匹配情况;而 6² = 36 不在数组中,故 6 也无配对。
以下是完整、健壮的实现方案:
import java.util.*;
public class SquarePairAnalyzer {
public static void main(String[] args) {
int[] sample = {9, 4, 3, 2, 6, 1};
// 存储所有已参与配对的元素(含 x 和 x²)
Set<integer> paired = new HashSet();
System.out.println("Output 1: Square pairs (x → x²):");
for (int i = 0; i Integer.MAX_VALUE) continue;
// 检查 x² 是否存在于数组中
boolean hasSquare = false;
for (int val : sample) {
if (val == square) {
hasSquare = true;
break;
}
}
if (hasSquare) {
System.out.println(x + " → " + square);
paired.add(x);
paired.add((int) square);
}
}
System.out.print("Output 2: Unpaired numbers: ");
List<integer> unpaired = new ArrayList();
for (int num : sample) {
if (!paired.contains(num)) {
unpaired.add(num);
}
}
System.out.println(unpaired.isEmpty() ? "None" : unpaired);
}
}</integer></integer>
关键优化说明:
- 使用
HashSet替代ArrayList存储已配对元素,使contains()时间复杂度从 O(n) 降至 O(1),显著提升性能; - 增加
x ≤ 0和x == 1的显式过滤,符合题意中“1视为未配对”的逻辑; - 用
long计算平方,规避大数溢出风险(如46341² > Integer.MAX_VALUE); - 外层循环直接遍历数组值而非下标,代码更简洁可读。
运行结果:
Output 1: Square pairs (x → x²): 2 → 4 3 → 9 Output 2: Unpaired numbers: [6, 1]
该方案结构清晰、边界鲁棒,适用于任意长度的非负整数数组,是解决此类“数值关系挖掘+补集提取”问题的标准实践范式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











