洛谷P1424 小鱼的航程(改进版)看到好多使用循环实现,时间复杂度太高,以下为非循环实现:
public static int solution(int x, int n){
int result = 0;
// TODO: 请在此编写代码
// 第一个不完整周内游泳的天数
int firstWeekDays = 5 - x + 1;
if( firstWeekDays < 0 ) {
firstWeekDays = 0;
}
// 去除开始一周天数后的完整周数
int intactWeek = n - (7 - x + 1);
if( intactWeek > 0 ){
int weekCount = intactWeek / 7;
int mod = intactWeek % 7;
if( mod > 5 ){
mod = 5;
}
// 完整周数游泳天数 + mod 的天数 + 第一个不完整周内游泳的天数
result = weekCount * 5 + mod + firstWeekDays ;
}else{
// x + n 后都在同一周内的情况
result = firstWeekDays > n ? n : firstWeekDays ;
}
result = result * 250;
return result;
}