主元素
题目
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
样例
给出数组[1,1,1,1,2,2,2],返回 1
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
题解
主元素的三道题如果不考虑空间复杂度为O(1)的要求,则都可以使用哈希表解决。而在空间复杂度为O(1)的限制下,我们可以采用对数组进行遍历,并删除任意两个不相同的元素,最后剩下的一定是主元素。
public class Solution {
/**
* @param nums: a list of integers
* @return: find a majority number
*/
public int majorityNumber(ArrayList<Integer> nums) {
int majorityNum = 0;
for (int i=0,time = 0;i<nums.size();i++)
{
if (time == 0)
{
majorityNum = nums.get(i);
time++;
}
else
{
time = majorityNum == nums.get(i) ? ++time : --time;
}
}
return majorityNum;
}
}
Last Update 2016.9.30