我有一个数组:
int[] anArray = new int[6];
如果数组包含1,4,5,4,4
怎么办?我怎样才能获得最多的比赛?在这种情况下,4是最常见的数字,并且有三个,因此该函数应返回3
。
如果我有1,2,1,2,3
,则应返回2
。
或者,如果我有4,0,1,2,3
,则应返回1
。
我真的无法理解。我试过这个:
public static int getCorrectMatches(int[] flowers) throws Exception {
int highest = 0;
for(int index = 0; index < 5; index++) {
int count = countMatches(flowers, index);
if(count > highest) {
highest = index;
}
}
return highest;
}
public static int countMatches(int[] array, int match) throws Exception {
int count = 0;
for(; count < array.length && array[count] == match; count++);
return count;
}
哪个不起作用。我很感激任何帮助。
答案 0 :(得分:3)
迭代数组并为每个数字存储一个哈希映射中的计数器,其中地图的键是数字,值是跟踪出现次数的计数器。第一次遇到新号码(没有键)时,您需要插入一个新的计数器。下次遇到相同的号码时,您只需使用新号码更新现有的计数器。
保持正在运行的“大多数匹配”号码并且每次更新计数器时都要更新它也不会太难。
答案 1 :(得分:0)
for each index in array
HashMap.put(number on index i, occurrences) +=1
check biggest value in the hash map
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put(K,%20V)
答案 2 :(得分:0)
public static int numberOfMatches(int[] numbers) {
int mostMatches = 0;
for(int i = 0; i < numbers.length; i++) {
int matches = 0;
int holder = numbers[i];
for(int number : numbers) {
if(number == holder) {
matches++;
}
}
if(matches > mostMatches)
mostMatches = matches;
}
return mostMatches;
}
这接受一个数组。它检查数组的长度,并为每个插槽循环。
对于每个插槽,我创建了2个变量。 holder
抓取广告位中的值,只要匹配就会增加matches
。
找到该插槽的所有可能匹配后,它会将找到的匹配数量与目前为止找到的最高匹配数量进行比较。
答案 3 :(得分:0)
您的countMatches()方法不正确。从循环变量中取消计数并检查循环内的相等性,而不是将其置于循环条件中。把它改成这样的东西:
public static int countMatches(int[] array, int match) throws Exception {
int count = 0;
for(int i=0; i< array.length ; i++){
if(array[i] == match) count++;
}
return count;
}
另外,如果我是你,我会改变
for(int index = 0; index < 5; index++) {
要,
for(int index = 0; index < flowers.length; index++) {