题目
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例
思路
我们将数组进行升序排序,然后遍历数组,判断数组元素个数,当满足numssize/2时返回当前元素
值得注意的是,c语言会向下取整,所以我们将numssize/2 -> (numsSize+1)/2从而向上取整
代码
int cmp(const void * a , const void * b)
{
return *(int *)a - *(int *)b;
}
/*
*majorityElement:寻找数组元素出现最多次数的元素
int* nums:数组
int numsSize:数组长度
返回值:出现次数最多的元素
*/
int majorityElement(int* nums, int numsSize){
qsort(nums , numsSize , sizeof(nums[0]) , cmp);
int sum = 1;
int i ;
for(i = 0; i < numsSize-1; i++)
{
if(nums[i] == nums[i+1])
{
sum++;
}
else
{
if(sum >= (numsSize+1)/2)
{
break;
}
else
{
sum = 1;
}
}
}
return nums[i];
}