版权声明:=================== 转载请注明出处======================= https://blog.csdn.net/weixin_40583722/article/details/88843459
问题:
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
我的思路及代码:
/* 思路:分治算法
*
* 逻辑:Step1:去重,将不重复的元素放在另外一个数组(nums_tmp)中;
* Step2:遍历原始数组,算出nums_tmp中各个元素在nums出现的次数,如果满足众数的条件,那么
* 返回该元素
*/
int majorityElement(int* nums, int numsSize)
{
int *p1 = nums;
int *p2 = NULL;
int j=1;
int nums_tmp[128] = {0};
nums_tmp[0] = nums[0];
for(int i = 0; i < numsSize-1; i++)
{
p2 = p1 + i;
while(*p2 != *p1)
{
nums_tmp[j++] = *p2;
}
}
int len2 = sizeof(nums_tmp)/sizeof(nums_tmp[0]);
int Num[50] = {0};
for(int i =0; i < len2; i++)
{
Num[i]++;
for(int j = 0; j < numsSize; j++)
{
while(nums[j] == nums_tmp[i])
Num[i]++;
if(Num[i] > numsSize/2)
return nums_tmp[i];
}
}
}