代码信号街机等级-4-16:"Are Similar?"



我通过了所有的测试用例,
但是我在隐藏用例中失败了。
我真的找不到错误案例和我的代码有什么问题。
请帮帮我

问题如下:

如果两个数组可以通过交换其中一个数组中的最多一对元素而从另一个数组中得到一个数组,则称为相似数组。

给定两个数组,检查它们是否相似。

例子对于A =[1,2,3]和B =[1,2,3],输出应为areSimilar(A, B) = true.

数组是相等的,不需要交换任何元素。

对于A =[1,2,3]和B =[2,1,3],输出应为areSimilar(A, B) = true.

通过交换B中的2和1,可以从A中得到B。

对于A =[1,2,2]和B =[2,1,1],输出应为areSimilar(A, B) = false.

对A或B中的任意两个元素进行交换都不会得到A和B平等的。

+)保证约束:b.length = a.length

这是我的代码:

boolean solution(int[] a, int[] b) {

int count = 0;
ArrayList<Integer> tempa = new ArrayList<>();
ArrayList<Integer> tempb = new ArrayList<>();

for(int i = 0; i < a.length; i++){
if(a[i]!=b[i]){

count++;

tempa.add(a[i]);
tempb.add(b[i]);
}

}

if(count==0||(count==2 && tempa.get(0)==tempb.get(1) && tempa.get(1)==tempb.get(0))){
return true;
} else return false;
}

下面的代码给出了正确的结果:

a: [1,2,3]
b: [1,2,3]

a: [1,2,3]
b: [2,1,3]

a: [1,2,2]
b: [2,1,1]

a: [1,2,1,2]
b: [2,2,1,1]

:(1、2、1、2、2、1]
b:[2、2、1、1、2、1]

a: [1,1,4]
b: [1,2,3]

a: [1,2,3]
b: [1,10,2]

a: [2,3,1]
b: [1,3,2]

a: [2,3,9]
b: [10,3,2]

a: [832, 998, 148,570, 533, 561, 894, 147,455, 279]
b: [832, 570, 148,998, 533, 561, 455, 147,894, 279]

你需要为不同的数组长度添加这个

if (a.length != b.length) return false;

你的if需要使用equals()

return count == 0 || (count == 2 && tempa.get(0).equals(tempb.get(1)) && tempa.get(1).equals(tempb.get(0)));

下面是一个失败的例子:

solution(new int[]{2, 3, 9}, new int[]{9, 3, 2, 5});

您应该在代码中添加长度相等检查,如下所示

static boolean solution(int[] a, int[] b) {
if(a.length != b.length) {
return false;
}
...
}

相关内容

最新更新