我正在使用Hashtable
为此HackerRank制作代码。我的代码通过了前4个第一个输入测试,但是当我尝试使用最后一个输入测试时,它会报告错误答案。
这是我的代码:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int migratoryBirds(int n, int[] ar) {
Hashtable<Integer,Integer> birds = new Hashtable<Integer,Integer>();
for (int i=0;i<n;i++) {
if (birds.get(ar[i])==null) {
birds.put(ar[i],1);
} else {
birds.put(ar[i],birds.get(ar[i])+1);
}
}
Set<Integer> keys = birds.keySet();
int maxKey = 0;
int maxValue = 0;
for (Integer key : keys) {
if ((maxKey==0 && maxValue==0) || maxValue<birds.get(key)) {
maxValue = birds.get(key);
maxKey = key;
}
}
return maxKey;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] ar = new int[n];
for(int ar_i = 0; ar_i < n; ar_i++){
ar[ar_i] = in.nextInt();
}
int result = migratoryBirds(n, ar);
System.out.println(result);
}
}
this是输入(它很大)。
有谁能告诉我为什么这是错的?
答案 0 :(得分:1)
这是因为以下要求
如果两种或多种鸟类同样常见,请选择ID号最小的类型。
使用HashTable
时,无法保证迭代顺序。
当计数相等时,添加显式if
检查以选择较小的索引
if ((maxKey==0 && maxValue==0) || maxValue<birds.get(key)
|| (maxValue == birds.get(key) && maxKey > key))
或使用TreeMap
Map<Integer,Integer> birds = new TreeMap<Integer,Integer>();
由于整数的可比性性质(及其自然顺序),上述工作原理