Java 代码未给出所需输出(候鸟-HackerRank)

Java 代码未给出所需输出(候鸟-HackerRank),java,Java,问题就在这里 我已经尝试了以下代码,这些代码不适用于特定的测试用例。测试用例在这里 我的代码是 static int migratoryBirds(List<Integer> arr) { List<Integer> typesofbirds = new ArrayList<>(); List<Integer> noofbirds = new ArrayList<>(); for(int i=0;i<a

问题就在这里

我已经尝试了以下代码,这些代码不适用于特定的测试用例。测试用例在这里

我的代码是

static int migratoryBirds(List<Integer> arr) {
    List<Integer> typesofbirds = new ArrayList<>();
    List<Integer> noofbirds = new ArrayList<>();
    for(int i=0;i<arr.size();i++){
        if(i==0){
            typesofbirds.add(arr.get(i));
        }
        else{
            for(int j=0;j<typesofbirds.size();j++){
                if(j==typesofbirds.size()-1 && typesofbirds.get(j) != arr.get(i)){
                    typesofbirds.add(arr.get(i));
                }
                else{
                    if(typesofbirds.get(j) == arr.get(i)){
                        break;
                    }
                }
            }
        }
    }

    System.out.println(typesofbirds);
    for(int i=0;i<typesofbirds.size();i++){
        int count=0;
        for(int j=0;j<arr.size();j++){
            if(typesofbirds.get(i) == arr.get(j)){
                count++;
            }
        }
        noofbirds.add(count);
    }
    System.out.println(noofbirds);

    int maximumbirdsindex=0;
    for(int i=1;i<noofbirds.size();i++){
        if(noofbirds.get(i)>noofbirds.get(maximumbirdsindex)){
            maximumbirdsindex=i;
        }
    }
    return typesofbirds.get(maximumbirdsindex);
}
static int migratoryBirds(列表arr){
List typesofbirds=new ArrayList();
List noofbird=new ArrayList();

对于(int i=0;i您需要做两件事:计算每种类型的鸟的数量,然后找到最大值。当您尝试这样做时,您似乎遇到了一个问题,即由于代码过于复杂而迷失在代码中。想想看:您可以数多少只鸟,并且知道哪些鸟的数量都在同一数据结构中是吗

只需1个阵列就可以很好地完成这一任务。每次计数时,您都会增加阵列的正确索引,然后按顺序确定哪只鸟的目击次数最多,并且该索引是正确的数字

如果你想用这个思维过程自己调试它,那就太好了。如果你想看到一个工作的实现,它就在下面(在你自己完成它之前,请不要检查它)

static int migratoryBirds(列表arr){
int[]birdCountArr=new int[6];//保证鸟数在[1,5]之间,我们忽略索引0。
用于(整数n:arr){
鸟笼[n]++;
}
int高=0;
int highBirdNum=0;
对于(int i=1;i高){
高=鸟笼[i];
highBirdNum=i;
}
}
返回高位;
}
编辑:再解释一下你的问题。在第一个循环中,我们只是简单地浏览给出的int列表,并将它们放入我们根据索引制作的数组中。如果鸟是“4”,我们将其放入索引4。因此,假设我们有以下输入:
11134452
我们将从该列表中获取每个数字,并根据索引将其放入数组中。因此,我们的数组如下所示:
[0,3,2,1,2,1]
我们有0只数字0的鸟(因为这是无效的),3只数字1的鸟,2只数字2的鸟,1只数字3的鸟,2只数字4的鸟,1只数字5的鸟。在这种情况下,正确的答案是1,因为这是数字最高的鸟

本质上,index=bird number,哪个索引最高,如果有多个索引具有相同的编号,则最低的索引获胜:)

My js solution

function migratoryBirds(arr) {
    let spotted = new Array(5).fill(0);

    for (let bird of arr) ++spotted[bird - 1];

    return spotted.indexOf(Math.max(...spotted)) + 1;

}

您没有描述您遇到的问题。您预期的和观察到的输出是什么?不是每个人都会阅读整个问题/手动测试您的代码。请在IDE中进行调试。请详细说明第一个for循环,或者提供一些链接到一些示例和/或解释那里到底发生了什么?我从来没有遇到过以前没有尝试过。后一个循环我理解。而且我只有学校级别的编程知识。尝试学习更多。为你更新我的帖子。