【问题标题】:How to check if an array has squared elements of another array (regardless of order)?如何检查一个数组是否有另一个数组的平方元素(不管顺序)?
【发布时间】:2019-08-27 21:41:09
【问题描述】:

a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121、14641、20736、361、25921、361、20736、361] 返回 true,因为 b[] 具有 a[] 中元素的平方值,与顺序无关。

这是我尝试过的......

static boolean comp(int a[], int b[]) {
        int x = 0;
        if (a.equals(b)) {
            for (int i : a) {
                for (int j : b) {
                    if (a[i] == b[j] * b[j]) {
                        x++;
                    } else {
                        x--;
                    }
                }
            }
        } else {
            return false;
        }
        if (x == a.length) {
            return true;
        } else {
            return false;
        }
    }

【问题讨论】:

  • 它是否必须包含来自a所有 元素的平方,或者如果它至少包含一个元素是真的吗?
  • 您的代码存在一些问题。你的第一个if 条件应该是a.equals(b) == false。您的 for loops 正在迭代数组 ab 的元素,而不是数组的索引。不确定计数应该做什么,但我假设您希望 b 中的每个元素都有一个 square。然而,简单的计数并不能解决这个问题(如果 b 中有多个正方形)。递减似乎是错误的。
  • 另外,如果ab 相等,则不一定是false。考虑ab 蜜蜂[1]

标签: java


【解决方案1】:
static boolean comp(int a[], int b[]) {

    for (int i : a) {
        if (!Arrays.asList(b).contains(i*i)) {
            return false;
        }
    }
    return true;
}

【讨论】:

    【解决方案2】:

    这样就可以了:

    static boolean comp(int a[], int b[]) {
    
        for (int i : a) {
            if (!Arrays.asList(b).contains(i*i)) {
                return false;
            }
        }
        return true;
    }
    

    简而言之,你遍历 a 和 b 的每一个值,看看 a 的平方值是否为 b。当您发现不匹配时,您会自动返回 false。否则,返回 true。

    【讨论】:

    • 找到第一个后返回。 OP 想知道所有元素在平方后是否都在另一个列表中。
    • @ML72:即使在编辑之后,您似乎也解决了不同的问题。没有人说b 中的每个元素都必须是a 中每个元素的平方。
    【解决方案3】:
    public static Boolean compare(int[] a, int[] b) {
      Arrays.sort(a);
      Arrays.sort(b);
      for (int i = 0; i < a.length; i++) {
        if (a[i] * a[i] != b[i]) {
          return false;
        }
      }
      return true;
    }
    

    【讨论】:

      【解决方案4】:

      List 有一个containsAll,我会使用它;使用 Java 8+ 和可能看起来像的流

      static boolean comp(int a[], int b[]) {
          return Arrays.stream(b).distinct().boxed().collect(Collectors.toList())
                  .containsAll(Arrays.stream(a).map(x -> x * x).boxed()
                  .collect(Collectors.toList()));
      }
      

      【讨论】:

        【解决方案5】:

        尝试对两个数组进行排序并同时对它们进行迭代,首先将第一个数组中的数字平方,然后检查它是否等于第二个数组中的元素。一旦你到达不相等的元素返回 false,否则返回 true。如果使用快速排序,这应该给你 2*n*log(n) + n。

        【讨论】:

          【解决方案6】:
          public static Boolean compare(int[] a, int[] b) {
            Arrays.sort(a);
            Arrays.sort(b);
            for (int i = 0; i < a.length; i++) {
              if (a[i] * a[i] != b[i]) {
                return false;
              }
            }
            return true;
          }
          

          【讨论】:

          • 请在您的答案中添加一些解释,以便其他人可以从中学习
          【解决方案7】:
          bool Same(int[] arr1, int[] arr2)
          {
              for (int i = 0; i < arr1.Length; i++)
              {
                  var correctIndex = Array.IndexOf(arr2, (int)Math.Pow(arr1[i], 2));
                  if (correctIndex == -1)
                  {
                      return false;
                  }
                  arr2.Take(correctIndex);
              }
              return true;
          }
          
          in c#
          

          【讨论】:

            猜你喜欢
            • 2021-06-04
            • 1970-01-01
            • 1970-01-01
            • 2022-01-09
            • 2021-12-03
            • 1970-01-01
            • 1970-01-01
            • 2018-12-17
            相关资源
            最近更新 更多