Java 给定一个数组,返回连续出现次数最多的元素。在爪哇

Java 给定一个数组,返回连续出现次数最多的元素。在爪哇,java,arrays,algorithm,Java,Arrays,Algorithm,在Java中,给定数组A[A,A,b,b,b,c,d,e,e]返回'b',因为它比数组中的任何其他元素都连续出现。我尝试过将每个元素与下一个元素进行比较,如果它们匹配,则增加一个计数,然后返回计数最高的元素,但我不知道如何将其实现为代码。注意-这假设字符在BMP中 保持4种状态-上一个字符,当前字符,当前计数,最大计数 首字母prev character到某个无效字符或空字符 将计数初始化为零 迭代字符,如果在任何时候当前字符和上一个字符不匹配,则重置当前字符和当前计数 当任何当前计数大于最大计

在Java中,给定数组A[A,A,b,b,b,c,d,e,e]返回'b',因为它比数组中的任何其他元素都连续出现。我尝试过将每个元素与下一个元素进行比较,如果它们匹配,则增加一个计数,然后返回计数最高的元素,但我不知道如何将其实现为代码。

注意-这假设字符在BMP中
  • 保持4种状态-
    上一个字符
    当前字符
    当前计数
    最大计数
  • 首字母
    prev character
    到某个无效字符或空字符
  • 将计数初始化为零
  • 迭代字符,如果在任何时候当前字符和上一个字符不匹配,则重置当前字符和当前计数
  • 当任何当前计数大于最大计数时,将当前字符更新为最大字符并更新最大计数
  • publicstaticvoidmain(字符串[]args){
    字符[]输入=新字符[]{'a','b','b','b','b','c','d','e','e'};
    if(input.length==0){
    返回;
    }
    char prev=(char)(输入[0]-1);//选择第一个字符以外的字符
    char maxChar=prev;
    int maxCount=0;
    int currentCount=0;
    for(最终字符当前:输入){
    如果(上一个!=当前){
    prev=当前值;
    currentCount=0;
    }
    currentCount++;
    如果(currentCount>maxCount){
    maxCount=当前计数;
    maxChar=电流;
    }
    }
    System.out.println(maxChar);
    }
    
    只需将当前元素与前一个元素进行比较,计算连续元素的数量,如果检测到连续元素,则检查其是否超过现有的最大值并跟踪值:

    public static int findmastconcertive(int…arr){
    int res=arr[0];
    整数计数=1;
    int maxCount=1;
    对于(int i=1;i最大计数){
    最大计数=计数;
    res=arr[i];
    }
    }
    否则{
    计数=1;
    }
    }
    返回res;
    }
    
    测试:

    
    System.out.println("Most consecutive: " + findMostConsecutive(1, 2, 1, 1, 3, 3, 3, 4, 2));
    System.out.println("Most consecutive: " + findMostConsecutive(2, 2, 2, 2, 3, 3, 3, 3));
    System.out.println("Most consecutive: " + findMostConsecutive(2, 2, 2, 2, 3, 3, 3, 3, 3, 3));
    
    输出

    Most consecutive: 3
    Most consecutive: 2
    Most consecutive: 3
    

    你能分享一下你试过的代码吗?这个问题在CS中是基本的。你可以发布一个你已经尝试过的暴力解决方案。我们很乐意提出优化建议。