最大连续天数的问题也是非常常见的一个题型,比较常见的形式就是连续签到n次以上的人数,统计最大连续登录天数等等。
最大连续天数的有一个较为通用的解法,这个通用解法放在后面具体描述。
解题思路
首先思考一个简单的问题,怎么统计连续两天登录人数:连续两天登录就是一个人在登录后第二天继续登录了,只要找到登录日期的第二天有登录记录就行了。显然通过自连接,很容易就能够做到。
然后是连续三天登录人数,显然通过两次自连接,同样能够得到连续三天登录的人数。但是当连续n天登录人群的n足够大的时候,比如7天连续登录,30天连续登录,再用自连接来做就很难完成了。
从这个角度发散一下,连续n天登录就是为了找到连续的一段日期,如果对日期进行排序(假设日期没有重复),每一段连续的日期,减去它的排名,得到的日期是相同的。
日期 | 排名 | 差值 |
---|---|---|
1-1 | 1 | 1-0 |
1-2 | 2 | 1-0 |
1-3 | 3 | 1-0 |
1-6 | 4 | 1-2 |
1-10 | 5 | 1-5 |
1-11 | 6 | 1-5 |
1-12 | 7 | 1-5 |
在得到差值之后,很显然,统计相同值出现的次数就是连续登录