数组中超过一半的元素

数组中超过一半的元素

题目描述

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

解法一:

利用排序算法,因为这个数字的出现次数超过数组长度的一半,所以排序之后,中间的数必定为答案

 int majorityElement(vector<int>& nums) {   
    sort(nums.begin(), nums.end());
    return nums[nums.size() / 2];
}

解法二:

因为这个数字出现次数超过数组长度的一半,所以目标数字的个数 -其他数字的个数总和 >= 1,故我们利用这个性质当我们遇到目标是+1,否则-1,当count为0是重置index,之后index记录的位置一定是目标数字

int majorityElement(vector<int>& nums) {
       int cnt = 0, ret = 0;

        for(int i = 0; i < nums.size(); ++i){
            if(cnt == 0) ret = nums[i];
            if(nums[i] == ret) cnt++;
            else cnt--;
        }

        return ret;
    }
posted @ 2020-03-16 18:58  Lngstart  阅读(424)  评论(0编辑  收藏  举报