題目:用面向對象的方法求出數組中重復 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 遍歷打印出來,結束。