c# 合并重叠时间段的算法
一.采用非排序:
方案一:
使用递归算法,如不喜欢递归的伙伴们,可以使用whie代替。
1.文件:Extract_Chao.cs(核心)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Extract 8 { 9 public class Extract_Chao 10 { 11 List<ExtractInfo> extractList = new List<ExtractInfo>(); 12 public void Main() 13 { 14 var list = AddExtract(); 15 BuidExtract(list, 0); 16 17 for (int i = 0; i < extractList.Count; i++) 18 { 19 if (extractList[i] == null) continue; 20 Console.WriteLine(extractList[i].StartPoint + "-------" + extractList[i].EndPoint); 21 } 22 } 23 24 private void BuidExtract(List<ExtractInfo> list, int num) 25 { 26 for (int i = 0; i < list.Count; i++) 27 { 28 if(i==num)continue; 29 30 if (list[i] != null &&list[num]!=null) 31 { 32 if (list[i].StartPoint > list[num].StartPoint && list[i].StartPoint <= list[num].EndPoint) 33 { 34 if (list[i].EndPoint > list[num].EndPoint) 35 { 36 var extractTemp = new ExtractInfo() { StartPoint = list[num].StartPoint, EndPoint = list[i].EndPoint }; 37 list[num] = extractTemp; 38 //如果数组有变化,那么就重新递归回调,(我的死穴) 39 num=0; 40 BuidExtract(list,num); 41 } 42 list[i] = null; 43 } 44 } 45 } 46 47 num++; 48 49 if (num < list.Count) 50 { 51 BuidExtract(list, num); 52 } 53 else 54 { 55 extractList = list; 56 } 57 58 59 } 60 61 private List<ExtractInfo> AddExtract() 62 { 63 var list = new List<ExtractInfo>(); 64 list.Add(new ExtractInfo() { StartPoint = 24, EndPoint = 41 }); 65 list.Add(new ExtractInfo() { StartPoint = 58, EndPoint = 75 }); 66 list.Add(new ExtractInfo() { StartPoint = 62, EndPoint = 80 }); 67 list.Add(new ExtractInfo() { StartPoint = 79, EndPoint = 89 }); 68 69 list.Add(new ExtractInfo() { StartPoint = 5, EndPoint = 10 }); 70 list.Add(new ExtractInfo() { StartPoint = 20, EndPoint = 30 }); 71 list.Add(new ExtractInfo() { StartPoint = 6, EndPoint = 25 }); 72 73 74 return list; 75 } 76 77 78 } 79 }