题目29:数组中出现次数超过一般的数字(leetcode链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/)
题目分析
方法1:对数组进行排序,位于数组中间的一个数必然是出现次数超过数组长度一般的数。
方法2:数组中出现次数超过数组长度的数的出现次数比其他所有数字出现次数的和还要多,因此我们可以遍历数组同时保存两个值,数组中的一个元素和出现次数。当遍历到下一个元素的时候,如果和这个值相同则次数+1,不同则次数-1,当次数为0时保存下一个值并将次数设为1,最后保存的值就是数组中出现次数超过一半的元素。
代码描述
class Solution {
public:
int majorityElement(vector<int>& nums) {
int length = nums.size();
int val = nums[0],frequency = 0;
for(int i = 0;i < length;i++)
{
if(nums[i] != val)
{
frequency--;
if(frequency == 0)
{
frequency = 1;
val = nums[i];
}
}
else
{
frequency++;
}
}
return val;
}
};