面试经典150题-5-多数元素-力扣169

85 阅读1分钟

多数元素-力扣169

难度:eassy

题目描述

image.png

示例

image.png

解法1:消消乐

题目的硬性要求,一定存在"多数元素"。所以直接消消乐,设置一个目标值k,和他的投票数vote,拿当前元素和前一个元素做比较,如果和前一个相同则vote++,如果不同则vote--。vote减少为0时,更新当前元素为目标值。

int majorityElement(int* nums, int numsSize) {
    // 边界相关
    if(numsSize == 1) return nums[0];

    //记录下每个元素出现的次数
    int i, j;
    int k=nums[0], vote=1; // 投票法
    for(i = 1; i < numsSize; i ++){
        if(nums[i] != k){
            vote --;
            if(vote == 0){
                k = nums[i];
                vote ++;
            }
        }
        else
            vote ++;

    }

    return k;

}

时间复杂度:O(n)O(n)