https://blog.csdn.net/be_gin_ner/article/details/86602802
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
遍历数组,从第一个数开始count=1,如果遇到相同的数就加1,遇到不同的数就减1,减到0就换下一个数开始计数。
int majorityElement(int* nums, int numsSize) {
int count=1;
int majority_num=nums[0]; //初始时众数为第一个数
for(int i=1;i<numsSize;i++)
{
if(majority_num==nums[i])
count++;
else
{
count--;
printf("count:%d\n",count);
if(count==0)
majority_num=nums[i+1];
}
}
return majority_num;
}
int main()
{
int a[]={2,2,4,2,1,2};
int len=sizeof(a)/sizeof(int);
int num=majorityElement(a,len);
printf("%d",num);
system("pause");
return 0;
}
推荐先看up主视频 https://www.bilibili.com/video/av3862808
思想:
(1)栈为空,入栈;
(2)栈顶元素=数组中元素,入栈;
(3)其余情况,出栈。
int majorityElement(int* nums, int numsSize) {
int count=0;
int majority_num;
for(int i=0;i<numsSize;i++)
{
if(count==0)
{
majority_num=nums[i];
count++;
}
else if(majority_num==nums[i])
{
count++;
}
else
count--;
}
return majority_num;
}