找出最长连续自然数个数

题目:

   一个无序自然数组,比如[100,2,1,3]在时间复杂度为O(n)的条件下,求出最大连续自然数个数。

如本题输出结果为:3.

 

//

#include <iostream>
#include <cstring>

using namespace std;

int Max_Length(int a[],int max,int n);//函数声明,计算最大的连续自然数长度

int main()
{

	int a[]={100,2,3,1,4,8,5,9,10,22,7,23,54,0};	 
	int max=0;//保存数组中最大元素值
	int n=(sizeof(a)/sizeof(int));//计算数组长度
	for(int i=0;i<n;i++)
	{
		if(a[i]>max)
			max=a[i];
	
	}
	int Number;
	Number=Max_Length(a,max,n);

	printf("%d\n",Number);

	return 0;
}

int Max_Length(int a[],int max,int n)
{
	//不能根据max建立数组,因为建立数组的时候,
	//元素个数必须是常量。我想到了动态分配内存
	int* b=NULL;
	b=(int*)malloc((max+1)*sizeof(int));
	
	//memset是按字节设置的,可以全0,可以全-1,设成其他的值会有影响,如果int是4字节的
	//32位全0还是0,而如果设置-1一样的道理,每一位都是1,32位全1,最终还是代表-1,设置成其他的就容易出错。
	//主要因为memset是按字节设置值的。

        memset(b,-1,(max+1)*(sizeof(int)));	


	for(int i=0;i<n;i++)
	{
		b[a[i]]=a[i];
	
	}
	int MaxLength=0;
	int tmp=0;

	for(i=0;i<=max;i++)
	{	
	
		if(b[i]!=-1)
		{
			tmp+=1;
			
		}
		else 
		{
			tmp=0;
			
		}
		if(tmp>MaxLength)
		{
			MaxLength=tmp;
			
		}
	}
	free(b);//释放指针
	return MaxLength;

}


 

欢迎用其他方法的同仁讨论。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值