需求:求签到页连续签到天数
分析:如图为签到的标记,如果中间漏签,会用灰色图案显示,并不会计入库中,因此库中都是签到的信息(带时间字段),时间相隔一天的为连续,怎么计算连续天数呢?
结果:参考了leetcode里的算法【674. Longest Continuous Increasing Subsequence】
算法看似简单,对于鲜有算法经验的人来说,还真不好思考。
//计算连续签到天数
private int continuousCheckins(CheckIn checkin) {
//库中签到记录
List<CheckIn> checkIns = checkInService.getSignList(checkin.getUid(), startDate, getSysDate(), -1);//时间升序
int max = 1;
int temp = 1;
int size = checkIns.size();
if (size<=1){
return size;
}
for (int i = 1; i < checkIns.size(); i++) {
if (DateUtils.intervalDays(checkIns.get(i).getSignDate(),checkIns.get(i-1).getSignDate())>1) {
temp = 1;
} else{
temp++;
}
max = Math.max(max, temp);
}
return max;
}
第一次感觉到算法的重要性!!!