JZ-028-陣列中出現次數超過一半的數字

雄獅虎豹發表於2021-12-23

陣列中出現次數超過一半的數字

題目描述

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

題目連結: 陣列中出現次數超過一半的數字

程式碼

/**
 * 標題:陣列中出現次數超過一半的數字
 * 題目描述
 * 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。
 * 由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
 * 題目連結:
 * https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&&tqId=11181&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
 */
public class Jz28 {

    public int moreThanHalfNum_Solution(int[] array) {
        int majority = array[0];
        for (int i = 1, cnt = 1; i < array.length; i++) {
            if (array[i] == majority) {
                cnt++;
            } else {
                cnt--;
            }
            if (cnt == 0) {
                majority = array[i];
                cnt = 1;
            }
        }
        int cnt = 0;
        for (int val : array) {
            if (val == majority) {
                cnt++;
            }
        }
        return cnt > array.length / 2 ? majority : 0;
    }
}
【每日寄語】 不辜負每一個太陽升起的日子,不辜負身邊每一場花開,不辜負身邊一點一滴的擁有。

相關文章