46. majorityNumber 主元素
题目链接
题目描述
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
样例
给出数组[1,1,1,1,2,2,2],返回 1挑战
要求时间复杂度为O(n),空间复杂度为O(1)
分析
这个题目在编程之美上面讲过,可以利用一个数学上的知识,当一个数组中去掉了两个不相同数字,那么之前出现频率大于1/2的任然在剩余的数字中出现频率大于1/2
代码
class Solution {
public:
/*
* @param nums: a list of integers
* @return: find a majority number
*/
int majorityNumber(vector<int> &nums) {
// write your code here
int n = nums.size();
if(n<=2) return nums[0];
int j = n-1;
int i = j-1;
while(i>=j/2)
{
if(nums[i]!=nums[j])
{
if(i<=j-2)
{
nums[i] = nums[j-1];
j-=2;
}
else
{
j=i-1;
i=j;
}
}
--i;
}
return nums[j];
}
};