一、leecode题目
二、解题思路
以下方法的前提条件是:出现次数最多的元素的个数一定要大于全部元素个数的二分之一。
(1)方法1
定义两个变量,一个变量a记录最多的值,另一个变量b记录最多值出现的次数,分三种情况:
1、当b为零时,表示没有没有数据,a进行赋值,b计数器加一。
2、当a等于遍历的数据时,b计数器加一。
3、当a不等于遍历的数据时,b计数器减一。
(2)方法2
定义一个数组来表示堆栈,先进的后出,后进的先出,分为三种情况:
1、堆栈里没有数据时,插入数据。
2、堆栈顶部的数据和遍历的数组元素相等时,插入数据。
3、堆栈顶部的数据和遍历的数组元素不相等时,删除数据。
三、虚机模拟测试代码
#include <stdio.h>
#include <stdlib.h>
void main()
{
int majorityElement(int* nums, int numsSize);
int majorityElement_method_array(int* nums, int numsSize);
int array[] = {6,6,6,7,7};
int result,result_1;
int array_size = 5;
result = majorityElement(array,array_size);
result_1 = majorityElement_method_array(array,array_size);
printf("result : %d\n",result);
printf("result_1 : %d\n",result_1);
}
int majorityElement_method_array(int* nums, int numsSize)
{
int *array = malloc(sizeof(int) * numsSize);
int top = -1;
int i;
for(i=0;i<numsSize;i++)
{
if(top == -1)
{
top++;
array[top] = nums[i];
}
else if(array[top] == nums[i])
{
top++;
array[top] = nums[i];
}
else
{
top--;
}
}
return array[0];
}
int majorityElement(int* nums, int numsSize)
{
int i;
int count = 0;
int val;
for(i=0;i<numsSize;i++)
{
if(count ==0)
{
count++;
val = nums[i];
}
else if(val == nums[i])
{
count++;
}
else
{
count--;
}
}
return val;
}
四、虚机模拟测试截图
五、leecode提交源码
(1)提交版本1
int majorityElement(int* nums, int numsSize)
{
int i;
int count = 0;
int val;
for(i=0;i<numsSize;i++)
{
if(count ==0)
{
count++;
val = nums[i];
}
else if(val == nums[i])
{
count++;
}
else
{
count--;
}
}
return val;
}
(2)提交版本2
int majorityElement(int* nums, int numsSize)
{
int *array = malloc(sizeof(int) * numsSize);
int top = -1;
int i;
for(i=0;i<numsSize;i++)
{
if(top == -1)
{
top++;
array[top] = nums[i];
}
else if(array[top] == nums[i])
{
top++;
array[top] = nums[i];
}
else
{
top--;
}
}
return array[0];
}
六、leecode提交截图