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

Java编程:如何从给定数组输出平方平方根对及未配对元素

解决方案

整体思路

要完成两个需求,我们可以通过以下步骤实现:

  1. 先将数组转换为集合,方便快速查找元素是否存在。
  2. 遍历数组,找出所有满足「一个数是另一个数的平方」的数对,同时记录这些已配对的元素,避免重复输出。
  3. 最后筛选出数组中不在配对集合里的元素,即为无对应配对的元素。

完整代码

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);
    }
}

代码说明

  1. 集合转换:将数组转为HashSet,使得查找元素的时间复杂度变为O(1),比嵌套循环更高效。
  2. 配对查找:
    • 遍历每个元素,计算其平方值,检查平方值是否存在于集合中。
    • 用pairedElements集合记录已配对的元素,避免重复输出同一数对的双向结果(如2和4只输出一次)。
    • 排除自身平方等于自身的情况(如1的平方是1,但数组中只有一个1,不构成有效配对)。
  3. 无配对元素筛选:遍历原数组,收集不在pairedElements中的元素,并用集合去重后输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:43:34