• 求一个从小到大排序的日期集合中的最大连续天数


    具体方法:
    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;)
                {
                    
                    short b = 0;
                    short max = 1;
                    for (int j = 0; j < days.Count; j++)
                    {
                        if (a + 1 == days.Count) break;
                        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次循环了。

    //语言组织能力有待提高啊!>_<!!!

    欢迎各位讨论指正!

  • 相关阅读:
    初始化注解和销毁注解
    MySQL、SQLServer、Oracle 分组排序
    mybatis 中SQLServer 和 mysql 模糊查询 不同点
    SpringBoot学习之logback.xml 配置指定包或类输出至单独的日志文件中
    类比 RocketMq 和 淘宝消息服务:
    SVN提交文件失败:系统找不到指定路径
    官网下载MySQL 并安装
    Java 变量参数传入方法,方法结束后传入的值
    03-类与对象课后作业(1)
    02方法-课后动手动脑
  • 原文地址:https://www.cnblogs.com/makeke/p/6183738.html
Copyright © 2020-2023  润新知