给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3] 输出: 3
示例 2:
输入: [2,2,1,1,1,2,2] 输出: 2
方法一
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//当前是空栈,入栈
//当前元素和栈顶元素相同,入栈
//当前元素和栈顶元素不同,出栈
int majorityElement(int* nums, int numsSize){
int *stack = (int *)malloc(sizeof(int) * numsSize);
int top = -1;
int res;
int i;
for (i = 0; i < numsSize; i++) {
if (top == -1) {
stack[++top] = nums[i];
} else if (nums[i] == stack[top]) {
stack[++top] = nums[i];
} else {
top--;
}
}
res = stack[0];
free(stack);
return res;
}
int main()
{
int nums[] = {2, 1, 2, 1, 2, 3, 2};
int res = majorityElement(nums, 7);
printf("%d\n", res);
return 0;
}
方法二
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//用cand和count模拟栈,cand是栈顶元素,count是元素个数
//当前是空栈,入栈
//当前元素和栈顶元素相同,入栈
//当前元素和栈顶元素不同,出栈
int majorityElement(int* nums, int numsSize){
int cand;
int count = 0;
int i;
for (i = 0; i < numsSize; i++) {
if (count == 0) {
cand = nums[i];
count++;
} else if (cand == nums[i]) {
count++;
} else {
count--;
}
}
return cand;
}
int main()
{
int nums[] = {1, 1, 1, 1, 2, 3, 4};
int res = majorityElement(nums, 7);
printf("%d\n", res);
return 0;
}