栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

查找数组中的主元并输出

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找数组中的主元并输出

查找数组中的主元并输出

题目来源:
王道考研数据结构辅导书线性表顺序表示大题第12题(2013统考真题)
题目描述:

说明:
参考了王道课后题视频讲解的思路实现了代码,我采用的是容易想到的算法中的第一种(最优算法我想不到),感谢王道,这种思路做一道题类似的就都会做了,加油。

算法思路:
因为本题中说了数组中的元素大小都大于0且小于n,则暗示我们可以创建一个和数组A大小相同的辅助数组B,以空间换时间,这样可以保证时间复杂度更低。

代码实现:

#include
#include 
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);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号