//第一种方法(若众数数量超过1,则只输出其中1个)
public static int maxlength(int[] a){
Arrays.sort(a);
int length = 1;
int maxlen = 1;
int zhongshu = a[0];
for (int i = 0; i < a.length - 1; i++){
if (a[i] == a[i+1])
length++;
else{
if (length > maxlen)
{
maxlen = length;
zhongshu = a[i];
}
length = 1;
}
}
System.out.println("众数是" + zhongshu);
return maxlen;
}
public static void main(String[] args){
int[] a = new int[20];
for (int i = 0; i < a.length; i++){
a[i] = (int)(Math.random() * 10 + 1);
System.out.print(a[i] + " ");
}
System.out.println();
System.out.println("The time is " + maxlength(a));
}
//第二种方法(只输出所有数及其对应频数)
public static void main(String[] args){
int[] a = {10 , 10 , 10 , 8 , 8 , 7 , 7 , 7 , 7 , 7};
int[] frequency = new int[11];
for (int i = 0; i < a.length; i++)
frequency[a[i]]++;
for (int i = 0; i < a.length; i ++)
System.out.print(a[i] + " ");
System.out.println();
System.out.println("==============================");
for (int i = 0; i < a.length; i++)
System.out.print(frequency[a[i]] + " ");
System.out.println();
}
//修改后的版本,可以显示众数↓
public static void main(String[] args){
int[] a = {10 , 10 , 10 , 8 , 8 , 7 , 7 , 7 , 7 , 7};
int[] frequency = new int[11];
for (int i = 0; i < a.length; i++)
frequency[a[i]]++;
for (int i = 0; i < a.length; i ++)
System.out.print(a[i] + " ");
System.out.println();
System.out.println("==============================");
for (int i = 0; i < a.length; i++)
System.out.print(frequency[a[i]] + " ");
int mostfreq=0/*众数的频数*/, pos=-1/*众数*/;
for (int i = 0; i < a.length; i++){
if (frequency[i]>mostfreq){
mostfreq=frequency[i];
pos=i;
}
}
System.out.println("\n"+pos+","+mostfreq);
System.out.println();
}
//第三种方法(建立映射表,比上一种方法少占内存)深中吕沛霖提供
private static void findmost(int[] list){
int[] map=new int[list.length];
int tpos;
int pos=0;
Arrays.fill(map, 0);
for (int i=0;i<list.length;++i){
tpos=findpos(map,list[i]);
if (tpos==-1){
map[pos]=list[i];
++pos;
continue;
}
}
int[] freq=new int[pos];
Arrays.fill(freq, 0);
for (int i=0;i<list.length;++i){
++freq[findpos(map,list[i])];
}
int most=-1;
int num=0;
for (int i=0;i<freq.length;++i){
if (freq[i]>num){
num=freq[i];
most=i;
}
}
System.out.println(map[most]+","+num);
}
private static int findpos(int[] map,int n){
for (int c=0;c<map.length;++c){
if (map[c]==n) return c;
}
return -1;
}
评论