#169 Majority Element

题目:

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.

题解:

重点在于The majority element总是存在的。所以可以这样处理:对于每两个array元素,若不同,则删去,相同则保留。则最后剩下的元素即为所求。

public class Solution {
    public int majorityElement(int[] nums) {
        int nTimes = 0;
        int ret = 0;
        for(int i = 0; i < nums.length; i ++)
        {
            if(nTimes == 0)
            {
                ret = nums[i];
                nTimes = 1;
            }
            else
            {
                if(ret == nums[i])
                    nTimes ++;
                else
                    nTimes --;
            }
        }
        return ret;
    }
}

哦,这个其实是 Moore voting algorithm。多数投票算法。

其他解法还有hashmap,排序返回中间数,分治法等,代码就不给了。

另外,官方解答中有一个思路比较有意思:Runtime: O(n) — Bit manipulation: We would need 32 iterations, each calculating the number of 1's for the ith bit of all n numbers. Since a majority must exist, therefore, either count of 1's > count of 0's or vice versa (but can never be equal). The majority number’s ith bit must be the one bit that has the greater count.看看就好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值