Java 如何检查一个数组是否有另一个数组的平方元素(无论顺序如何)?

Java 如何检查一个数组是否有另一个数组的平方元素(无论顺序如何)?,java,Java,a=[121144,19161,19144,19,11] b=[12114641207363612592136120736361] 返回true,因为b[]具有a[]中元素的平方值,而不考虑顺序 这是我试过的 static boolean comp(int a[], int b[]) { int x = 0; if (a.equals(b)) { for (int i : a) { for (int j :

a=[121144,19161,19144,19,11]
b=[12114641207363612592136120736361] 返回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;
        }
    }
列表
有一个,我会用它;使用Java8+和可能看起来像

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

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

static boolean comp(int a[], int b[]) {

    for (int i : a) {
        if (!Arrays.asList(b).contains(i*i)) {
            return false;
        }
    }
    return true;
}
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。

公共静态布尔比较(int[]a,int[]b){
数组。排序(a);
数组。排序(b);
for(int i=0;i
公共静态布尔比较(int[]a,int[]b){
数组。排序(a);
数组。排序(b);
for(int i=0;i
bool Same(int[]arr1,int[]arr2)
{
for(int i=0;i
它是否必须包含
a
中所有元素的平方,或者如果它至少包含一个元素,则为真?您的代码存在一些问题。您的第一个
if
条件应该是
a.equals(b)=false
。循环的
for
是在数组
a
b
的元素上迭代,而不是在数组的索引上迭代。不确定计数应该做什么,但我假设你想要b中每个元素的a
square
。然而,简单的计数不能解决这个问题(如果b中有多个正方形)。递减似乎是错误的。而且,如果
a
b
相等,则不一定
false
。考虑<代码> < <代码> >代码> B<代码>代码> > [ 1 ] < /代码>当您找到第一个代码时返回。OP想知道所有元素在平方后是否都在另一个列表中。@ML72:即使在编辑之后,您似乎也解决了另一个问题。没有人说
b
中的每个元素都需要是
a
中每个元素的平方。请在您的答案中添加一些解释,以便其他人可以从中学习
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;
}
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#