题目解析
图示3如下:
本题如果暴力求解的话,即将一年中每天的登录可获得的金币数整理为数组arr,然后在此数组上使用定长x滑窗去滑动,记录滑动过程中,每一个状态下滑窗内金币总和,保留最大的即为题解。
但是,本题一共有n个月(1 ≤ n ≤ 2 * 10^5),每个月di天(1 ≤ di ≤ 10^6),如果要得到数组arr,则arr数组最坏情况下有 n * di 长度。这是爆内存+超时的节奏。因此暴力不可取。
我思考这题主要就是画图总结规律,我最终总结出规律如下:
连续登录x天 等价于 长度x的滑窗,而d[i]又代表第i个月的天数,因此他们存在关系如下:
即长度x的滑窗跨了多个月,且滑窗的左边界落在了第L月中,右边界落在了第R月中,那么此时长度x的滑窗在L~R的天数范围内,该如何移动,才能保证获得的金币数最多呢?
答案是尽可能地往右移。
比如下面例子:我需要连续7天登录的金币数最大