【发布时间】:2014-08-27 12:59:22
【问题描述】:
我正在尝试编写一种方法,该方法将 2 个整数数组作为输入,并根据每个元素之间的二进制 & 比较它们,并考虑一个数组是否来自另一个数组。数组的大小也是已知且相等的。
因此,基本上如果该方法将 A = [2, 0, 0, 0] 和 B = [6, 0, 0, 3] 作为输入,它应该返回 true,因为 (2 & 6) != 0(小心这里的括号呵呵)但是如果它取相反的 A = [6, 0, 0, 3] 和 B = [2, 0, 0, 0] 它应该返回 false 因为 A 是从B(或 B 包含在 A 中)。
如果通过在位于相同位置的两个元素之间应用 & 运算符得到 true(基本上是该方法应该返回 true 的情况),则一个数组包含在另一个数组中。
到目前为止,我得到了以下代码,它显然不起作用,因为它没有考虑一个数组是否是从另一个数组派生的。我能想到的所有操作都是可交换的,没有帮助。
private boolean checkContainment(int[] firstArr, int[] secondArr)
{
List<Integer> posList = new ArrayList<Integer>();
for(int i = 0;i < firstArr.length;i++)
{
if((firstArr[i] & secondArr[i]) != 0)
{
posList.add(i);
}
}
for(int j = 0;j < firstArr.length;j++)
{
if(posList.size() > 0)
{
for(int k : posList)
{
if((j != k) && (firstArr[j] != secondArr[j]))
{
return true;
}
}
}
}
return false;
}
我很确定调整以下代码以使其正确非常简单,但我无法理解它。
【问题讨论】:
-
所以基本上如果方法将 A = [2, 0, 0, 0] 和 B = [6, 0, 0, 3] 作为输入,它应该返回 true,因为 (2 & 6) != 0(注意这里的括号,呵呵)。为什么要返回
true?为什么要返回false? -
你能在这种情况下定义包含和派生吗?
-
它应该返回 true 因为 (A[0] & B[0]) == TRUE ,否则当你有 (B,A) 作为参数时它应该返回 FALSE 因为你可以从中派生 B A 因为 B 是 A 加上添加的东西,也就是 B 是从 A 派生的。
-
就我而言,2 & 6 与 6 & 2 相同,因为 0010 & 0110 在二进制与运算方面是 0010。
-
6 由 2 组成,因为 2 是 0010,而 6 是 0110。你在 2 中添加一些东西得到 6,因此 6 是从 2 派生的,而 [6,0,0,3] 是派生的来自 [2,0,0,0]。
标签: java arrays algorithm comparison