描述
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
注意事项
You may assume that the array is non-empty and the majority number always exist in the array.
样例
给出数组[1,1,1,1,2,2,2],返回 1
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
代码
第一次想的过于简单,这段代码只适用于元素大小不超过数组长度的数据
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
// write your code here
int i=0,count=0,max=0,length = nums.size();
int sum[100000];
for(i;i<length;i++) //初始化统计数组
sum[i] = 0;
for(i=0;i<length;i++)
{
sum[nums[i]]++;
}
for(i=0;i<length;i++)
{
if(count<sum[i])
{
count = sum[i];
max = nums[i];
}
}
return max;
}
};
正确代码:
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
// write your code here
int temp,i,count=0,length = nums.size();
for(i = 0; i < length; i++)
{
if(count == 0)
{
temp = nums[i];
count++;
}
else{
if(temp != nums[i])
{
count--;
}else{
count++;
}
}
}
return temp;
}
};