39. 数组中出现次数超过一半的数字

1. 描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

2. 例子

示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

3. 限制

  • 1 <= 数组长度 <= 50000

4. 题解

n = i_nums.size()
时间复杂度: O(n)
空间复杂度: O(1)

class Solution 
{
public:
    // int majorityElement(vector<int>& nums) 
    int majorityElement(vector<int> &i_nums) 
    {
        int majorityNum = i_nums.front(), majorityTimes = 1;
        for(int i = 1; i < i_nums.size(); i++)
        {
            if(i_nums[i] == majorityNum)
            {
                majorityTimes++;
            }
            else
            {
                if(majorityTimes > 1)
                {
                    majorityTimes--;
                }
                else
                {
                    majorityTimes = 1;
                    majorityNum = i_nums[i];
                }
            }
        }

        return majorityNum;
    }
};
comments powered by Disqus