https://leetcode.com/problems/number-of-days-between-two-dates/description/ | Easy |
---|
Даны две строки date1
и date2
в формате "YYYY-MM-DD"
, представляющие две даты.
Верни абсолютную разницу в количестве дней между этими датами.
Input:
date1 = "2020-01-15", date2 = "2019-12-31”Output:
15
Input:
date1 = "2020-01-01", date2 = "2020-01-02”Output:
1
fun daysBetweenDates(date1: String, date2: String): Int {
// Функция для проверки високосного года
fun isLeap(year: Int): Boolean {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
}
// Количество дней в каждом месяце
val daysInMonth = intArrayOf(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
// Функция для подсчёта дней с начала эпохи до заданной даты
fun countDays(date: String): Int {
val parts = date.split("-").map(String::toInt)
val year = parts[0]
val month = parts[1]
val day = parts[2]
var days = 0
// Суммируем дни за полные года
for (y in 1971 until year) {
days += if (isLeap(y)) 366 else 365
}
// Суммируем дни за полные месяцы текущего года
for (m in 1 until month) {
days += if (m == 2 && isLeap(year)) 29 else daysInMonth[m - 1]
}
// Добавляем дни текущего месяца
days += day
return days
}
// Возвращаем абсолютную разницу между двумя датами
return kotlin.math.abs(countDays(date1) - countDays(date2))
}
O(y)
, где y
— разница в годах между 1971 и max(date1, date2), так как проходит цикл по годам.
O(1)
, используется фиксированное количество памяти.