Java编程:如何从给定数组输出平方平方根对及未配对元素
解决方案
整体思路
要完成两个需求,我们可以通过以下步骤实现:
- 先将数组转换为集合,方便快速查找元素是否存在。
- 遍历数组,找出所有满足「一个数是另一个数的平方」的数对,同时记录这些已配对的元素,避免重复输出。
- 最后筛选出数组中不在配对集合里的元素,即为无对应配对的元素。
完整代码
import java.util.HashSet; import java.util.Set; public class SquarePairFinder { public static void main(String[] args) { int[] a = {1,2,3,6,9,4}; Set<Integer> numSet = new HashSet<>(); for (int num : a) { numSet.add(num); } Set<Integer> pairedElements = new HashSet<>(); // 输出平方与平方根对应数对 System.out.println("存在平方与平方根对应关系的数对:"); for (int num : a) { int square = num * num; // 检查平方数是否存在,且避免自身平方等于自身的情况(如1) if (numSet.contains(square) && num != square) { // 避免重复输出双向数对(如2→4和4→2) if (!pairedElements.contains(num)) { System.out.println(num + " , " + square); pairedElements.add(num); pairedElements.add(square); } } } // 输出无对应配对的元素 Set<Integer> unpairedElements = new HashSet<>(); for (int num : a) { if (!pairedElements.contains(num)) { unpairedElements.add(num); } } System.out.print("无对应平方/平方根配对的元素:"); String unpairedStr = String.join("和", unpairedElements.stream().map(String::valueOf).toArray(String[]::new)); System.out.println(unpairedStr); } }
代码说明
- 集合转换:将数组转为
HashSet,使得查找元素的时间复杂度变为O(1),比嵌套循环更高效。 - 配对查找:
- 遍历每个元素,计算其平方值,检查平方值是否存在于集合中。
- 用
pairedElements集合记录已配对的元素,避免重复输出同一数对的双向结果(如2和4只输出一次)。 - 排除自身平方等于自身的情况(如1的平方是1,但数组中只有一个1,不构成有效配对)。
- 无配对元素筛选:遍历原数组,收集不在
pairedElements中的元素,并用集合去重后输出。
内容的提问来源于stack exchange,提问作者Aditya Shastri
相关产品推荐
相关产品推荐

