获得最大的数字" n"在发生的数组中" n"时

时间:2018-02-15 18:36:18

标签: java arrays

标题总结了一下。 例如{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)));

   }

}

1 个答案:

答案 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次。