目录
一、题目:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
二、示例:
示例:
输入:[3,2,3]
输出:3
输入:[2,2,1,1,1,2,2]
输出:2
三、思路:
将每一个元素与下一个元素相比,把第一个元素赋值给ans,并且将cnt置“1”。之后与后面的元素进行对比。如果出现相同的元素cnt就加上去“1”,如果出现不同的元素就减去“1”。如果cnt为“0”,则将当前新的元素赋值给ans,这样随后剩下来的就是两种元素中为多数的元素。
四、代码实现:
#include<stdio.h>
#include<string.h>
int majorityElement(int* nums, int numsSize)
{
int cnt = 0, ans;//ans用来存贮当前数字,cnt用来存储次数
for (int i = 0; i < numsSize; i++)
{
if (cnt == 0)
{
ans = nums[i];
cnt = 1;
}
else {
if (nums[i] == ans)
{
cnt++;
}
else {
cnt--;
}
}
}
return ans;
}
int main()
{
int arr[] = { 2, 2, 2, 1, 1, 1, 2 };
int len = sizeof(arr) / sizeof(arr[0]);
int ret = majorityElement(arr, len);
printf("%d", ret);
return 0;
}