46. 主元素

来源:互联网 发布:卫生网络答题 编辑:程序博客网 时间:2024/04/30 13:04

描述:

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

注意,可以假设数组是非空的,且主元素总是存在于数组中。

样例:

给出数组[1,1,1,1,2,2,2],返回 1。

要求:

时间复杂度为O(n),空间复杂度为O(1)。

标签:贪心

思路:

在遍历数组的时候保存两个值:数组中的某个数字以及该数字目前出现次数。

遍历到下一个数字的时候,如果下一个数字和保存的数字相同,则次数加1;

                                           如果下一个数字和保存的数字不同,则次数减1。

如果次数为零,保存下一个数字,并把次数设为1。

由于主元素出现的次数比其他所有数字出现的次数之和还多,那么主元素肯定是最后一次把次数设为1时对应的数字。

代码:

class Solution {
public:
    int majorityNumber(vector<int> &nums) {
       int majority=nums[0],time=1;
       for(int i=1;i<nums.size();i++){
           if(majority==nums[i]){
               time++;
           }
           else {
               time--;
           }
           if(time==0){
               majority=nums[i];
               time=1;
           }
       }
       return majority;
    }
};