java 关于数组 计数的面试题

题目:用面向对象的方法求出数组中重复 value 的个数 :  1  出现:1 次3 出现:2 次8 出现:3 次2 出现:4

  提供数组 :  int[] arr = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5} ;

答案:

 1     // 面试题,给定一个数组,按照顺序将 元素的重复次数打印出来
 2         int array [] = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5} ;
 3         Arrays.sort(array);   // 排序
 4         int count = 0 ;  // 初始化计数器
 5         int temp = array[0] ;  // 初始化一个变量 此时为1(数组第一个元素)
 6         //定义一个map,key为元素,value为次数。利用map 同样的key 会覆盖掉前面的value的特性
 7         Map<Integer,Integer> map = new HashMap<Integer, Integer>() ;
 8         for (int i=0 ; i<array.length ; ++i){
 9             //排完序,相同的元素会在一块,遇到不相同的 进行新的计数
10             if (temp != array[i]){
11                 temp = array[i] ;
12                 count = 1 ;
13             }else { //然后遇到重复的 计数器+1,
14                 count ++ ;
15             }
16             map.put(array[i],count) ;
17         }
18         // 将 map遍历出来
19         for (Map.Entry<Integer,Integer> entry : map.entrySet()){
20             System.out.println(entry.getKey()+"出现了:"+entry.getValue());
21         }

结果:

1出现了:3
2出现了:2
4出现了:5
5出现了:4
6出现了:1
7出现了:1
8出现了:2
88出现了:1
9出现了:1
77出现了:1

解题思路:先进行排序,这样重复的元素会排到一块。然后 将索引为0的元素赋值给 temp,然后循环遍历,如果temp == 遍历出来的值,计数器+1,如果 != 的话,就是新的不与上面的重复的元素,开始新的计数,然后将本次循环的元素 作为key,计数作为值,存到map中(map有个特性,同样的key会覆盖掉原来的value,这样就会一直覆盖到最新的重复数,再进行下一个新key的计数)。 最后将map 遍历打印出来,结束。

 

posted @ 2018-10-23 11:21  Yang-lianjun  阅读(1620)  评论(0编辑  收藏  举报