最大出现次数统计的关键算法
Posted chenjiajiale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大出现次数统计的关键算法相关的知识,希望对你有一定的参考价值。
编写一个程序,对用户输入的任意一组字符如{3,1,4,7,2,1,1,2,2},输出其中出现次数最多的字符,并显示其出现次数。如果有多个字符出现次数均为最大且相等,则输出最先出现的那个字符和它出现的次数。例如,上面输入的字符集合中,“1”和“2”都出现了3次,均为最大出现次数,因为“1”先出现,则输出字符“1”和它出现的次数3次。
注意:使用分支、循环结构语句实现。
package seven; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Scanner; //3,1,4,7,2,1,1,2,2 public class one { public static void main(String[] args) { System.out.print("输入一组字符串:"); Scanner s = new Scanner(System.in); String n = s.nextLine(); int[] array = new int[n.length()]; for (int i = 0; i < n.length(); i++) { char sig = n.charAt(i);//将输入的字符串拆分单个字符 int num = Integer.parseInt(sig+""); array[i] = num; } System.out.println( getMostInteger( array ) ); s.close(); } public static String getMostInteger( int[] arrayMath ){ //key保存出现过的数字,value保存形式为 下标_出现次数长度的字符。 Map<Integer,String> m = new HashMap<>(); int max = 1;//保存最大出现的次数 int minIndex = 0;//保存最大数的下标 for( int i = 0 ; i < arrayMath.length ; i ++ ){ if( m.containsKey( arrayMath[i] ) ){ //containsKey判断是否存在该键(arrayMath[i]) m.put( arrayMath[i] , m.get( arrayMath[i] ) + 1 ); String[] s = m.get(arrayMath[i]).split("_");//split();是将指定字符串按某指定的分隔符进行拆分,拆分将会形成一个字符串的数组并返回。//将索引和出现次数分离 int length = s[1].length();//获取出现次数 if( length > max ){ max = length; minIndex = Integer.parseInt(s[0]);//把()里的内容转换成整数 }else if( length == max ){ if( Integer.parseInt( s[0] ) < minIndex ){ minIndex = Integer.parseInt( s[0] ); } } }else { m.put( arrayMath[i] , i + "_" + 1 ); } } String result = "出现次数最多的是" + arrayMath[minIndex] + "出现的次数为" + max; return result; } }
以上是关于最大出现次数统计的关键算法的主要内容,如果未能解决你的问题,请参考以下文章