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.
---------------------------------------------------------------------------------------------------------------------
思路
如果只是想解决这道题,那么很简单,如果对时间有要求,则需要思考一下。这里涉及到一个Moore's voting algorithm,
A Linear Time Majority Vote Algorithm,以及实例演示链接。
该算法相关证明可以参看:
PDF文档:The Boyer-Moore Majority Vote Algorithm
代码
public class Solution {
public int majorityElement(int[] num) {
int main = num[0]; // 用于记录主元素,假设第一个是主元素
int count = 1; // 用于抵消数的个数
for (int i = 1; i < num.length; i++) { // 从第二个元素开始到最后一个元素
if (main == num[i]) { // 如果两个数相同就不能抵消
count++; // 用于抵消的数据加1
} else {
if (count > 0) { // 如果不相同,并且有可以抵消的数
count--; // 进行数据抵消
} else { // 如果不相同,并且没有可以抵消的数
main = num[i]; // 记录最后不可以抵消的数
}
}
}
return main;
}
}