劍指offer:數組中出現次數超過一半的數字

 數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。

解題思路:

如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。

在遍歷數組時保存兩個值:一是數組中一個數字,一是次數。遍歷下一個數字時,若它與之前保存的數字相同,則次數加1,否則次數減1;若次數爲0,則保存下一個數字,並將次數置爲1。遍歷結束後,所保存的數字即爲所求。然後再判斷它是否符合條件即可。

public class MoreThanHalfNum_Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int cur = 0;
        int times = 0;
        int length = array.length;
        if (length <= 1) {
            return length == 1 ? array[0] : 0;
        }
        cur = array[0];
        times = 1;
        for (int i = 1; i < length; i++) {
            if (cur == array[i]) {
                times++;
            } else {
                if(i != length-1) {//當最後一個數字和當前保存的數字不相等時,不對次數遞減
                    times--;
                }
                if(times == 0) {
                    cur = array[i];
                    times = 1;
                }
            }
        }

        return times > 1 ? cur : 0;
    }
}

 

發佈了67 篇原創文章 · 獲贊 10 · 訪問量 6757
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章