题目描述
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路:
1,两层for循环遍历,让每一个元素和所有元素进行比较,相同的元素标记并计数若计数值大于⌊ n/2 ⌋,就把对应的数值输出.
但是这样考虑是不全面的,因为计数值不可能大于⌊ n/2 ⌋,并且奇数和偶数对应的也不一样,放弃
2,先排序再取中间一位,这样做的缺点是会出现超过时间限制,特别是遇到第43个样例的时候(number[] ={1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2})
3,没遇到一个相同的数字就加一,遇到不同的数字就减一,若有数比这个数重复的次数多就把新的数作为比较对象(这个思想也许我解释的不是太好,因为感觉还没有理解透彻),不过这种方法确实节省时间
int majorityElement(int* nums, int numsSize)
{
int major=nums[0];
int count,i;
count =1;
for(i=1;i
{
if(count == 0)
{
count++;
major = nums[i];
}
else if(major == nums[i])
{
count++;
}
else
count--;
printf("%d&%d&%d\n",count,major,i);
}
//printf("%d\n",count);
return major;
}