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;
}