程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 求一個從小到大排序的日期集合中的最大連續天數,從小到大天數

求一個從小到大排序的日期集合中的最大連續天數,從小到大天數

編輯:關於.NET

求一個從小到大排序的日期集合中的最大連續天數,從小到大天數


具體方法:
static short Days()
        {
            var days = new List<DateTime>
            {
               Convert.ToDateTime("2016-12-01"),
               Convert.ToDateTime("2016-12-04"),
               Convert.ToDateTime("2016-12-06"),
               Convert.ToDateTime("2016-12-08"),
               Convert.ToDateTime("2016-12-09"),
               Convert.ToDateTime("2016-12-12"),
               Convert.ToDateTime("2016-12-13"),
               Convert.ToDateTime("2016-12-14"),
               Convert.ToDateTime("2016-12-16"),
               Convert.ToDateTime("2016-12-17"),
               Convert.ToDateTime("2016-12-18"),
               Convert.ToDateTime("2016-12-19"),
               Convert.ToDateTime("2016-12-21")
            };
            var counts = new List<short>();
            short a = 0;
            for (int i = 0; i < days.Count;)
            {
                if (a + 1 == days.Count) break;
                short b = 0;
                short max = 1;
                for (int j = 0; j < days.Count; j++)
                {
                    var first = days[i].AddDays(j + 1);
                    var second = days[a + 1];
                    if (first == second)
                    {
                        max++;
                        a++;
                        b++;
                    }
                    else
                    {
                        a -= b;
                        break;
                    }
                }
                counts.Add(max);
                a += max;
                i += max;
            }

            return counts.Max();
        }

控制台輸出:Console.WriteLine(Days());

//輸出結果:

//算法原理:

//第一個元素加1天和第二個元素比較,日期不同的話, 直接跳出循環,從下一個元素繼續對比
//第一個元素加1天與第二個元素比較,如果日期相同則最大連續天數加1,然後第二個元素加1天與第三個元素比較,日期相同再加1。依次執行下去,直到有兩個元素日期不同,然後跳出循環,將本次循環的連續天數記錄到集合
//進行下一次循環的時候,將元素下標加上上一次循環得出的最大連續天數,跳過連續的元素執行循環,減少循環次數。比如集合的第四個元素(2016-12-08)下標是3,它和第五個元素(2016-12-09下標是4)是連續的,那麼他們的連續天數就是2,
//那麼本次循環結束,執行下一次循環的時候,將第一個for的下標3加上連續的天數2,得出5,那麼循環就可以從第六個元素開始了,中間略過了1次循環。同理,如果連續的天數是4,那麼就可以省略3次循環了。

//語言組織能力有待提高啊!>_<!!!

歡迎各位討論指正!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved