C#实现:传入一组整数, 能够返回该组数最长的连号是几连号?
代码如下:
//测试用例:5,6,7,8,9,10,11,12,13, 14,1, 2, 3, 4, 5, 6, 0 ,输出结果为最长的连号。
public void NumArray(int[] array)//
{
int ALLnum =0;//记总数
int num = 0;//单次的连数
bool isOver = false; //循环遍历结束标志
int tempIndex = 0; //记录连数大于1的所有连数的 首个整数的下标
int index =0;
int i = 0;
List<int> Num = new List<int>();//通过这个list集合找出最长的连数
List<int> allIndex = new List<int>();
if (array.Length > 0)
{
for(;i<array.Length-1; i++)
{
if(i==array.Length-2 && array[i+1] - array[i] == 1)//说明一下:这个if条件是当最后的那个整数满足条件的时候,对Allnum和tempIndex进行处理
{
ALLnum = num + 2;
Num.Add(ALLnum);
tempIndex = i - num;
allIndex.Add(tempIndex);
num = 0;
}
if (array[i+1] - array[i] == 1)
{
num += 1;
}
else if (num > 1)
{
ALLnum = num + 1;
Num.Add(ALLnum);
tempIndex = i - num;
allIndex.Add(tempIndex);
num = 0;
}
if (i == array.Length-2)
{
isOver = true;
}
}
}
if(isOver== true)
{
//找出最大的连数
int maxNum = Num[0];
for(int j=0;j<Num.Count;j++)
{
if(Num[j] > maxNum)
{
maxNum = Num[j];
index = j;
}
}
Console.WriteLine("index:" + index);
Console.WriteLine("最长连数的数目为:" + maxNum);
Console.WriteLine("最长连数的开始下标:" + allIndex[index]);
Console.Write("最长连数为:");
for (int ii=allIndex[index];ii<allIndex[index]+maxNum;ii++)
{
Console.Write(array[ii]+" ");
}
isOver = false;
}
}
在主函数中调用就可以了,水平有点菜,花了好几个小时才搞定,还是希望可以帮到大家!