【发布时间】:2013-05-21 12:39:45
【问题描述】:
好的,所以我有一个方法需要接收一个充满ints 的数组,然后对照它的镜像检查它,看看它匹配的最大镜像是什么。所以例如我有数组[7, 1, 2, 9, 7, 2, 1],它可以匹配的最大数组是2,在[1, 2]匹配。
现在我将它分为 3 种方法。一个接受数组,另一个反转数组并返回它 (mirrorArray)。第三个是计算匹配数组的大小(groupCount)。这是我目前所拥有的:
public int maxMirror(int[] nums) {
int[] revArray = mirrorArray(nums);
return groupCount(nums, revArray);
}
private int[] mirrorArray(int[] nums) {
int[] newArray = new int[nums.length];
for (int i = nums.length-1, j = 0; i >= 0; i--, j++) {
newArray[j] = nums[i];
}
return newArray;
}
private int groupCount(int[] aFor, int[] bRev) {
int maxCount = 0;
int groupSize = 1;
//get aFor value
for (int i = 0; i < aFor.length; i++) {
int[] tempA = Arrays.copyOfRange(aFor, 0, groupSize);
//loop through bRev and check for matches
for (int j = 0; j < bRev.length; j++) {
int[] tempB = Arrays.copyOfRange(bRev, j, j+groupSize);
if (Arrays.equals(tempA, tempB)) {
maxCount = tempA.length;
}
}
groupSize++;
}
return maxCount;
}
它在某处的第 3 种方法中失败(返回 1 而不是 2),我很困惑为什么我的循环没有返回我想要的东西。任何帮助将不胜感激。
【问题讨论】:
-
它是怎么失败的?你得到一个例外?返回值是否错误?
-
返回的值有误。例如,如果它遍历上面示例中的数组,它返回一个 1,而它应该是一个 2。
-
当
groupCount方法被调用时aFor和bRev中的值是什么? -
aFor 是最初传入的正向数组,bRev 是相反的。在
mirrorArray方法中计算。 -
检查我的答案,我在没有分配新数组的情况下解决了问题(性能大幅提升!),希望对您有所帮助:)