java CodeSignal街机关卡-4 -16:“相似吗?”

lymgl2op  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(78)

我通过了所有的测试用例,
但是我在隐藏的情况下失败了。
我真的找不到错误案例,也找不到我的代码有什么问题。
请帮帮我
问题如下:
如果两个数组中的一个可以通过交换其中一个数组中至多一对元素而从另一个数组中得到,则称这两个数组相似。
给定两个数组,检查它们是否相似。
示例
对于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.长度= a.长度
这是我的代码:

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]
a:[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]
答:[832、998、148、570、533、561、894、147、455、279]
乙:[832、570、148、998、533、561、455、147、894、279]

jm81lzqq

jm81lzqq1#

您需要为不同的数组长度添加此选项

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

如果需要使用equals()

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

mzillmmw2#

下面是一个失败的例子:

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;
    }
    ...
}

相关问题