打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据结构面试题总结2

遇到这个题最简单的想法就是,统计每个元素出现的次数。但是无法知道数组中有多少种元素,并且这样会用到其他的存储空间,再查找结果的时候也需要多遍历一次结果的数组。

正确的解决办法是去记录重复元素(不管是否是结果元素)的数量,然后碰见一个不同元素就减一(相当于抵消了),碰见结果元素也是一样的。

思考一下,结果元素会超出一半,所以当所有不同元素被抵消完肯定还会剩下结果元素。

这种方法只遍历一次数组。

int FindNum(int *a, int n){	int result = a[0];	int result_count = 1;	for (int i = 1; i < n; i++)	{		if (a[i]==result)		{			result_count++;		} 		else		{			result_count--;			if (result_count==0)			{				result = a[i];				result_count = 1;			}		}	}	return result;}


完整版

int FindNum(int *a,int len)
{
int result = a[0];
int result_count = 1;
for (int i = 1; i < len; i++)
{
if (a[i] == result)
{
result_count++;
}
else
{
result_count--;
if (result_count == 0)
{
result = a[i];
result_count = 1;
}
}
}
return result;
}

int main()
{

int a[] = {1,3,2,3,3,4,3,3,3};
int len = sizeof(a) / sizeof(a[0]);
int res = FindNum(a,len);
cout << res << endl;

system("pause");
    return 0;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
​LeetCode刷题实战561:数组拆分 I
四因数
【记录帖】(No.001)从零打卡刷Leetcode
C/C++: 十六进制转10进制源码
494,位运算解只出现一次的数字
LeetCode实战:最大子序和
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服