1. 程式人生 > 其它 >MySQL調優的一些總結

MySQL調優的一些總結

劍指 Offer 39. 陣列中出現次數超過一半的數字

題目

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

思路

方法一:雜湊表

通過一個 hashmap 記錄每個數的個數,如果大於一半就輸出。

方法二:排序

排序,然後最中間的數就是次數超過陣列長度一半的數

方法三:Boyer-Moore 投票演算法

核心就是票數相抵,超過一半的肯定會留到最後

知乎上面看到的一種回答

https://www.zhihu.com/question/49973163/answer/617122734

程式碼

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int candidate = -1;
        int count = 0;
        for (int num : nums) {
            if (candidate == num) {
                ++count;
            } else if (--count < 0) {
                candidate = num;
                count = 1;
            }
        }
        return candidate;
    }
};