###题目:给定一个数组,求该数组中最长的连续子数组
eg:a[7]={1,2,3,4,5,7,8,} 返回5
####分析:如果依次找出所有连续子数组其时间复杂度就会较高,所以对于数组问题我们优先考虑时间复杂度为O(n)的方法。分析如下:
①:依次遍历每个数值,如果该数值为前一个数值+1,则代表连续,使用临时变量+1即可。
②:当碰到不连续的值时,则需要将统计临时变量重置,且只需要从当前位置进行往后判断,因为当出现不连续的点时,前面连续部分的数肯定是最多的,因此不需要再进行遍历。
③:当后面存在长度更长的子数组时,再对临时变量进行更新。
附上主要函数代码:(代码还可以改进,临时写的)
int FindArray(int *a , int n)
{
int temp =1;
int temp2 = 0;
for(int i = 1; i <n ;i++)
{
if(a[i] = a[i-1]+1)
temp++;
else
{
if(temp>temp2)
temp2 = temp
temp = 1;
}
if(temp>temp2)
temp2 = temp;
}
return temp2;
}