题目
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。一、找到众数
我的思路是先找到可能为主要元素的元素,即众数,然后再判断它是否为真正的主要元素。
其众数的搜寻代码如下:
int Find(int* arr, int len)
{
int flag, temps=0;
for (int i = 0; i < len; i++)
{
if (temps == 0)
{
flag = arr[i];
temps = 1;
}
else if (arr[i] == flag) temps++;
else temps--;
}
return flag; /* 返回众数flag */
}
二、判断它是否为主要元素
在数组中寻找与它相同的数,并计数,超过一半则为主要元素,反之则不是,输出-1。
代码如下:
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,8,8,8,8,8,8,8 };
int lenth = sizeof(a) / sizeof(a[0]); /* 计算数组长度 */
int num = Find(a, lenth); /* num为众数 */
int sum = 0;
for (int i = 0; i < lenth; i++) /* 判断众数个数是否超过数组元素的一般 */
if (num == a[i]) sum++;
if (sum > lenth/2) printf("%d\n", num);
else printf("-1\n");
return 0;
}
完整程序如下:
其实就是上面2块拼起来的啦!😊
#include <stdio.h>
#include <stdlib.h>
/* 搜寻众数 */
int Find(int* arr, int len)
{
int flag, temps=0;
for (int i = 0; i < len; i++)
{
if (temps == 0)
{
flag = arr[i];
temps = 1;
}
else if (arr[i] == flag) temps++;
else temps--;
}
return flag; /* 返回众数flag */
}
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,8,8,8,8,8,8,8 };
int lenth = sizeof(a) / sizeof(a[0]); /* 计算数组长度 */
int num = Find(a, lenth); /* num为众数 */
int sum = 0;
for (int i = 0; i < lenth; i++) /* 判断众数个数是否超过数组元素的一般 */
if (num == a[i]) sum++;
if (sum > lenth/2) printf("%d\n", num);
else printf("-1\n");
return 0;
}