提供一个数组,其中部分数据是连续的,比如0~20的一组数据,其中少了一个数,假设少了11,那么连续中最大的数字就是10,
假如数组不是从0开始,假设是3~20,中间少了1个数,假如少了8,那么连续中最大数字就是7。
结合linq方法,大概的实现逻辑就是数组的第一个数作为起始数,利用where方法找到连续的数租,再取一个最大那个数即可。
先上测试结果:
测试1:
测试2:
代码如下:
/// <summary>
/// 获取一组数中几个连续数中最大的一个
/// </summary>
public static int GetContinueMaxNum(int[] arr)
{
if(arr.Length==0)return -1;
var startNum=arr[0];//如果数组最小值不是从0开始,需要获取起始值
return arr.Where((p,index)=>p==index+startNum).Max(p=>p);
}
测试代码(Dump方法是linqPad工具专门打印结果方法,用vs测试可以改成console):
void Main()
{
var rnd = new Random();
for(int i=0;i<3;i++)
{
var range=Enumerable.Range(rnd.Next(0,10),20).ToList();//产生一组连续的数组
range.Remove( rnd.Next(3,20));//随机移除1个数字
range.Dump();//打印移除后的数组
var maxNum=GetContinueMaxNum(range.ToArray());
maxNum.Dump();//打印连续的最大数
}
}