查找数组中的主元并输出

该博客介绍了一种在给定数组中寻找主元(出现次数超过一半的元素)的算法。通过创建一个与原数组大小相同的辅助数组,统计元素出现次数,最终找到主元。若不存在主元,返回-1。示例代码使用C语言实现,并在main函数中进行了测试。
摘要由CSDN通过智能技术生成

查找数组中的主元并输出

题目来源:
王道考研数据结构辅导书线性表顺序表示大题第12题(2013统考真题)
题目描述:
在这里插入图片描述
说明:
参考了王道课后题视频讲解的思路实现了代码,我采用的是容易想到的算法中的第一种(最优算法我想不到),感谢王道,这种思路做一道题类似的就都会做了,加油。
在这里插入图片描述
算法思路:
因为本题中说了数组中的元素大小都大于0且小于n,则暗示我们可以创建一个和数组A大小相同的辅助数组B,以空间换时间,这样可以保证时间复杂度更低。

代码实现:

#include<stdio.h>
#include <stdlib.h>
int GetMainElem(int A[],int n){
	int *B = (int*)malloc(n*sizeof(int));//动态申请一个和A数组大小相同的B数组
	int i,j,k,flag = 0;
	for(k = 0;k < n;k++){//数组B初始化
		B[k] = 0;
	}
	for(i = 0;i < n;i++){//数组B的下标就是数组A中元素的大小
		B[A[i]] ++;//用数组B来统计数组A中各元素的出现次数
	}
	for(j = 0;j < n;j++){
		if(B[j] > n/2){//若有主元则返回B数组下标,即所要求的A数组中元素的大小
			flag = 1;
			return j;
		}
	}
	free(B);//注意,这个和 malloc()函数配套使用的free()函数
	if(flag == 0){//数组A中没有主元
		return -1;
	}
	 
}
int main(){
	//测试
	int A[8] = {0,5,5,3,5,7,5,5};
	//int A[8] = {0,5,5,3,5,1,5,7};
	int res = GetMainElem(A,8);
	printf("%d",res);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值