标题总结了一下。
例如{2,3,3,3,1}
将返回3,{2,2,4,4,4}
将返回2;
在我的代码中,我只获得了n次出现的最大数字。如果3次出现2次,2次出现2次,程序应返回2但在我的代码中返回0。
public class arrays {
public static int NmalN(int[] arr) {
int max = 0;
int counter = 1;
for (int i=0; i<arr.length;) {
if (arr[i]>max) {
max = arr[i];
i++;
}
else i++;
}
for(int j = 0; j<arr.length; j++) {
if (arr[j]==max) {
counter++;
j++;
}
else {
j++;
}
}
if(max == counter) {
return counter;
}
else return 0;
}
public static void main(String[] args) {
int [] arr = {1,2,3,3,2,};
System.out.println("answer: "+ (NmalN(arr)));
}
}
答案 0 :(得分:0)
在我阅读您的代码时,您会发现数组中的最大数字max
。如果这个数字恰好发生max
次,不多也不少,你就返回它,否则你返回0.当3只发生两次时,你应该尝试使用2,然后使用1等,而不是仅仅返回0还要想一想:如果数字超过max
次,可以吗?
您查找max
的循环看起来很好(尽管惯例会将i++
放在for (int i=0; i<arr.length; i++)
内而不是循环内部。之后,您需要for
循环从max
向下倒数,对于该范围内的每个数字n
,检查它是否至少发生n
次。你的计算方法几乎是正确的,但正如Vasan在评论中所说的那样,你在循环中j++
和中都进行for(int j = 0; j<arr.length; j++)
,即两次,所以删除循环中的一个。每当您找到counter >= n
时,请返回n
。如果不是更早,则会在n
为0时发生,因为0始终存在0次。