题目描述
请你编写一个程序来计算两个日期之间隔了多少天。
日期以字符串形式给出,格式为 YYYY-MM-DD
,如示例所示。
样例
输入:date1 = "2019-06-29", date2 = "2019-06-30"
输出:1
输入:date1 = "2020-01-15", date2 = "2019-12-31"
输出:15
限制
- 给定的日期是
1971
年到2100
年之间的有效日期。
算法
(暴力枚举) $O(ans)$
- 每次增加一天,然后更新日期,直到两个日期相等。
- 注意判断闰年的情况。
时间复杂度
- 时间和答案的复杂度相等。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
int get_year(const string &d) {
int y = 0;
for (int i = 0; i < 4; i++)
y = y * 10 + d[i] - '0';
return y;
}
int get_month(const string &d) {
return (d[5] - '0') * 10 + d[6] - '0';
}
int get_day(const string &d) {
return (d[8] - '0') * 10 + d[9] - '0';
}
bool is_leap(int y) {
if (y % 400 == 0) return true;
return y % 100 != 0 && y % 4 == 0;
}
int daysBetweenDates(string date1, string date2) {
int y1, m1, d1;
int y2, m2, d2;
y1 = get_year(date1);
y2 = get_year(date2);
m1 = get_month(date1);
m2 = get_month(date2);
d1 = get_day(date1);
d2 = get_day(date2);
const int m[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
if (y1 > y2 || (y1 == y2 && m1 > m2) || (y1 == y2 && m1 == m2 && d1 > d2)) {
swap(y1, y2);
swap(m1, m2);
swap(d1, d2);
}
int ans = 0;
while (y1 != y2 || m1 != m2 || d1 != d2) {
ans++;
d1++;
if (is_leap(y1) && m1 == 2) {
if (d1 > 29) {
d1 = 1;
m1++;
}
} else {
if (d1 > m[m1]) {
d1 = 1;
m1++;
}
}
if (m1 == 13) {
m1 = 1;
y1++;
}
}
return ans;
}
};
感觉lc比赛的题有些偏工程应用(ps: 大佬也可以写写双周赛的题解
近几个月的双周赛的题解也都在写呀。
想学竞赛还是做cf比赛好,lc有些题目质量太低
表示这题当时做的时候有些吃力(\菜哭