找出數組中出現次數最多的數字&找出數組中只出現一次的數字

用map存儲,key爲數組中的元素,value爲元素出現的次數,若數組中的元素都只出現了一次,則map.put(num[i],1),否則,每當檢測到map中的key已經包含有數組元素時,將map中與之的value值加1,表示次數+1,最後再在map中找出value最大key,輸出。

package array;

import java.util.*;


/*
 * 找出數組中出現次數最多的數字
 * 思路:用一個HashMap記錄每個數字出現的次數
 */

public class MostFrequentInArray {
    public static void main(String[] args){
        int [] num={1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,34,4,4,4,4,5,5,6,67,7,7,89};

        System.out.print(getMostFrequent(num));//print 3

    }

    private static int getMostFrequent(int[] num) {

        int count=1;//數字出現的次數
        Map<Integer,Integer> m=new HashMap<>();

        for (int i=0;i<num.length;i++){

            if(m.containsKey(num[i])){
                m.put(num[i],m.get(num[i])+1);
            }else{
                m.put(num[i],count);
            }

        }

        int result=0;
        int most=0;//找出map中出現次數最多的元素
        Iterator iter=m.entrySet().iterator();
        while(iter.hasNext()){
            Map.Entry entry =(Map.Entry)iter.next();
            int key=(Integer)entry.getKey();
            int val=(Integer)entry.getValue();

            if(val>most){
                result=key;
                most=val;
            }
        }
        return result;
    }


}

對於找出數組中只出現了一次的數字來說,可以利用異或這個巧妙的辦法,由於任何一個數字和自己本身異或都等於0,所以從頭到尾一次異或數組中的每一個元素,那麼出現兩次的數字就會被全部抵消掉,最終的結果也就是所要求的只出現一次的那個數字啦。代碼很簡單 look

package array;
/*
 * 找出數組中只出現了一次的數字,
 * 題目:一個整型數組中,除了一個數字,其他數字都出現了兩次,找出這個數字,要求時間複雜度爲O(n).空間複雜度爲O(1)
 * 思路:異或運算,相同爲0 不同爲1
 */
public class FindNotDouble {

    public static void main (String [] args){

        int [] num={1,1,2,2,3,3,5,6,6};
        System.out.print(findnotdouble(num));
    }

    private static int findnotdouble(int[] num) {
        int result=num[0];
        for (int i=1;i<num.length;++i)
            result=result^num[i];
            return result;

    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章