Majority Element

Leetcode-Algorithm-Divide and Conquer-169

题目:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
(给定一个大小为n的数组,找到数组元素中的绝对众数,绝对众数也就是出现次数大于等于n/2次的元素。–假定数组非空且绝对众数必定存在。)

题解:

方法1:(运用c++中map容器的特性)
在c++中,map容器能够存储键值对。因此,我们可以把元素看成键(key),把每个元素的数目看成值(value),由于map容器中key不能重复,因此对于重复元素,我们可以用value进行计数。最后看哪个元素的计数大于n/2。

代码:

int majorityElement(vector<int>& nums) {
    if (nums.size() == 0) return -1;

    map<int, int> count;
    for (vector<int>::size_type ix = 0; ix < nums.size(); ++ix)
        if (++count[nums[ix]] > nums.size()/2)
            return nums[ix];

    return -1;
}

方法2:(运用排序以及绝对众数的特征)
由于绝对众数的个数大于数组大小的一半,因此,当数组排序后,位于数组中央的元素必定是绝对众数。

代码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值