找出数据中超过一半的数字

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        int n = numbers.size();
        if (n == 0) return 0;
         /*
         就好比,假如秦国强于六国和,那么秦国更能血拼过(齐国战赵国+其他四国)。
         假如,秦国不强于六国和,则血拼结果不是确定的。
         所以最后需要验证。

         */
        int num = numbers[0], count = 1;
        for (int i = 1; i < n; i++) {
            if (numbers[i] == num) count++;
            else count--;
            if (count == 0) {
                num = numbers[i];
                count = 1;
            }
        }
        // Verifying
        count = 0;
        for (int i = 0; i < n; i++) {
            if (numbers[i] == num) count++;
        }
        if (count * 2 > n) return num;
        return 0;
    }
};

猜你喜欢

转载自blog.csdn.net/xiziyunqi/article/details/82623009