题目:
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.看看就好吧。