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 遍歷打印出來,結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM