问题描述
6个数字的数组怎么能找到中间是否有连续的数总共有几组假如stringa={"1","2","4","5","7","9"}得出的几个应该是1,24,5四个连续数1,24,5两组
解决方案
解决方案二:
最笨的办法string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{if(n!="")ls.Add(n.TrimEnd(','));n="";}}}///intcou=ls.Count;//符合条件的个数
解决方案三:
上面的有点问题,下面是修改过的string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.TrimEnd(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数
解决方案四:
一次遍历,取相邻两个数进行判断就可以了。时间复杂度O(n)
解决方案五:
引用2楼wangjun8868的回复:
上面的有点问题,下面是修改过的string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.TrimEnd(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数
还一个总组数怎么出来
解决方案六:
引用4楼xiejie114的回复:
Quote: 引用2楼wangjun8868的回复:
上面的有点问题,下面是修改过的string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.TrimEnd(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数还一个总组数怎么出来
总数组是什么意思?描述一下
解决方案七:
引用5楼wangjun8868的回复:
Quote: 引用4楼xiejie114的回复:
Quote: 引用2楼wangjun8868的回复:
上面的有点问题,下面是修改过的string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.TrimEnd(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数还一个总组数怎么出来
总数组是什么意思?描述一下
里面1跟2是一个连续的组4跟5是一个连续的组总数是2组
解决方案八:
引用6楼xiejie114的回复:
Quote: 引用5楼wangjun8868的回复:
Quote: 引用4楼xiejie114的回复:
Quote: 引用2楼wangjun8868的回复:
上面的有点问题,下面是修改过的string[]a={"1","2","4","5","7","9"};stringn="";List<string>ls=newList<string>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.TrimEnd(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数还一个总组数怎么出来
总数组是什么意思?描述一下
里面1跟2是一个连续的组4跟5是一个连续的组总数是2组
string[]a={"1","2","4","5","7","9"};stringn="";List<string[]>ls=newList<string[]>();for(inti=0;i<a.Length;i++){if(i==0){n+=a[i]+",";}else{if(a[i]==(int.Parse(a[i-1])+1).ToString()){n+=a[i]+",";}else{n=n.TrimEnd(',');if(n!=""&&n.IndexOf(",")>-1){ls.Add(n.Split(','));n=a[i]+",";}}}}///intcou=ls.Count;//符合条件的个数
定义变了,List<string>ls=newList<string>();换成List<string[]>ls=newList<string[]>();了
解决方案九:
给你写一个usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){vararr=newint[]{1,2,3,5,6,9,11,12};varresult=寻找连续数字(arr).ToList();foreach(varsinresult){foreach(varxins)Console.Write("{0}",x);Console.WriteLine();}Console.WriteLine("总共找到{0}组!",result.Count);Console.WriteLine("__________按任意键结束");Console.ReadKey();}privatestaticIEnumerable<IEnumerable<int>>寻找连续数字(int[]arr){return寻找连续数字(arr,0,arr.Length-2);}privatestaticIEnumerable<IEnumerable<int>>寻找连续数字(int[]arr,intstart,intend){for(vari=start;i<=end;i++){varx=寻找连续数字(arr,i);if(x!=null)yieldreturnx;}}privatestaticIEnumerable<int>寻找连续数字(int[]arr,intstart){varend=start+1;for(;end<arr.Length&&arr[end]==arr[end-1]+1;end++){}if(end-start>1)returnarr.Skip(start).Take(end-start);elsereturnnull;}}}
不过看得懂c#语法而看不懂算法逻辑,其实一点也没用。希望你要注意。
解决方案十:
排下序,然后从第一个往后按索引循环判断下,如果前一个值与当前值相比差1,就是连续的
解决方案十一:
如果你需要跳过“包含”的输出组(例如1、2、3就包含了2、3),那么可以增加一个“跳过i下标”语句即可:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){vararr=newint[]{1,2,3,5,6,9,11,12};varresult=寻找连续数字(arr).ToList();foreach(varsinresult){foreach(varxins)Console.Write("{0}",x);Console.WriteLine();}Console.WriteLine("总共找到{0}组!",result.Count);Console.WriteLine("__________按任意键结束");Console.ReadKey();}privatestaticIEnumerable<IEnumerable<int>>寻找连续数字(int[]arr){return寻找连续数字(arr,0,arr.Length-2);}privatestaticIEnumerable<IEnumerable<int>>寻找连续数字(int[]arr,intstart,intend){for(vari=start;i<=end;i++){varx=寻找连续数字(arr,i);if(x!=null){yieldreturnx;i+=x.Count()-1;}}}privatestaticIEnumerable<int>寻找连续数字(int[]arr,intstart){varend=start+1;for(;end<arr.Length&&arr[end]==arr[end-1]+1;end++){}if(end-start>1)returnarr.Skip(start).Take(end-start);elsereturnnull;}}}