求数组中出现次数超过一半的数字

本文介绍了一种寻找数组中出现次数超过一半的元素的方法。通过遍历数组并使用计数技巧,可以高效地找到满足条件的数字。示例代码展示了如何实现这一算法,并验证了所找元素是否确实超过了数组长度的一半。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2

#include<iostream>
using namespace std;

bool _CheckArray(int* data, int length)
{
	if ((data == NULL) && (length <= 0))
		return true;
	else
		return false;
}

bool _CheckNum(int data[], int length, int num)
{
	int count = 0;
	for (int i = 0; i < length; i++)
	{
		if (num == data[i])
			count++;
	}

	if (count >= (length / 2))
		return true;
	return false;
}

int MoreThanHalfNum(int* data, int length)
{
	if (_CheckArray(data, length))
		return 0;

	int count = 1;
	int num = data[0];

	for (int i = 1; i < length; i++)
	{
		if (count == 0)
		{
			num = data[i];
			count = 1;
		}
		else if (num == data[i])
			count++;
		else
			count--;
	}
	if (_CheckNum(data, length, num))
		return num;
	return 0;
}

int main()
{
	int data[] = { 1, 2, 2, 2, 3, 2, 4, 5, 2, 2 };
	int length = sizeof(data) / sizeof(data[0]);
	cout << MoreThanHalfNum(data,length ) << endl;
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值