描述:
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
注意,可以假设数组是非空的,且主元素总是存在于数组中。
样例:
给出数组[1,1,1,1,2,2,2],返回 1。
要求:
时间复杂度为O(n),空间复杂度为O(1)。
标签:贪心
思路:
在遍历数组的时候保存两个值:数组中的某个数字以及该数字目前出现次数。
遍历到下一个数字的时候,如果下一个数字和保存的数字相同,则次数加1;
如果下一个数字和保存的数字不同,则次数减1。
如果次数为零,保存下一个数字,并把次数设为1。
由于主元素出现的次数比其他所有数字出现的次数之和还多,那么主元素肯定是最后一次把次数设为1时对应的数字。
代码:
class Solution {
public:
int majorityNumber(vector<int> &nums) {
int majority=nums[0],time=1;
for(int i=1;i<nums.size();i++){
if(majority==nums[i]){
time++;
}
else {
time--;
}
if(time==0){
majority=nums[i];
time=1;
}
}
return majority;
}
};