Java 如何检查一个数组是否有另一个数组的平方元素(无论顺序如何)?
a=[121144,19161,19144,19,11]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 :
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中每个元素的asquare
。然而,简单的计数不能解决这个问题(如果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#