我认为输出应该为1,但我一直得到2。黑客排名问题称为“迁移鸟”。从本质上讲,我得到了一个数字数组,所有数字都必须是1到5的整数。我要做的就是确定哪个数字在数组中显示最多。如果存在平局,则返回出现最多的最小整数。好吧,直到他们成为平手,我的解决方案才有效。由于某种原因,也许是基本的,而我只是想念它。我的代码在我认为不应该更新时也更新了1。我正在根据自己的输入进行测试:1 2 3 4 5 1 2 3 4 5.无论如何,如果有人想帮助我,将不胜感激。
static int migratoryBirds(List<Integer> arr) {
Map <Integer, Integer> map = new HashMap<Integer, Integer>();
int max = -1;
for(int i = 0; i < arr.size(); i++){
if(map.containsKey(arr.get(i))){
map.put(arr.get(i), map.get(arr.get(i)) + 1);
}else{
map.put(arr.get(i), 1);
}
}
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() > max){
max = entry.getKey();
System.out.println(max);
}
}
return max;
}
当我认为我的代码应该给出1时,输入1 2 3 4 5 1 2 3 4 5给出2。
答案 0 :(得分:1)
问题很可能在您的array
变量中。您正在将映射值与this.loginService.searchPerson(this.admin).subscribe((persons: Person[]) => {
if (Array.isArray(persons)) { // checks if persons is an array
this.persons = persons;
} else {
console.error('persons in not an array');
// this.persons = [persons];
this.persons = [];
}
});
进行比较,然后,如果该值大于max
,则将该值的键存储在max
中。在下一次迭代中,您将比较一个值和存储在max
中的键,这是不正确的。
提示:尝试维护两个变量max
和max
。看到它起作用后,清除冗余代码。