package com.miracle.test;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/**
 * 
 * @author Miracle
 *
 *随机生成50个数字(整数),每个数的范围是【10,,50】,统计每个数字出现的次数以及出现次数最多的数字与它的个数,
 *最后将每个数字及其出现次数打印出来,如果某个数字出现的次数为0,则不要打印它,打印时按照数字的升序排列
 */
public class RandomNumPrint { public static void main(String[] args) { Random r = new Random();
List<Integer> ls = new ArrayList<Integer>();
for (int i = 0; i < 50; i++) {
ls.add(r.nextInt(40) + 10);
}
/*for (int i : ls) {
System.out.print(i + ",");
}*/
for (int i = 10; i <= 50; i++) {
int n = 0;
for (int j : ls) {
if (i == j) {
n++;
}
}
if (n > 0)
System.out.print(i + ":" + n + ",");
}
}
}

解决方案 »

  1.   

    Random r = new Random();
    int[] a = new int[50];
    Map<Integer,Integer> m = new LinkedHashMap<Integer,Integer>();
    for(int i= 0;i<50;i++){
    a[i]=r.nextInt(41)+10;
    }
    Arrays.sort(a);
    for(int i = 0;i<50;i++){
    if(m.containsKey(a[i])){
    m.put(a[i], m.get(a[i])+1);
    }
    else 
    m.put(a[i], 1);
    }
    System.out.println(m);
      

  2.   

    时间复杂度,O(n*log2(n) + n);
    空间复杂度O(2n).
      

  3.   


    Random r = new Random();
    int[] a = new int[51];
    for(int i= 0;i<50;i++){
    a[r.nextInt(41)+10]+=1;
    }
    int max=a[0];
    int count=0;
    for(int i=1;i<51;i++){
      if(max<a[i]){
       count=i;
       max=a[i];
      }
      if(a[i]>0){
       printf(i+" 出现 "+a[i]+" 次");
       }
    }
     printf("出现次数最多的是"+max+" 出现 "+count+" 次");
      

  4.   


    O(n*log2(n))这是咋算的?是Arrays.sort()的时间复杂度?Arrays.sort(),看了下java源码,大于7的数组应该调用的是快速排序,O(n*log(n)).
    长度小于7的用的插入排序 。