Решение на Leetcode за деня на годината


Ниво на трудност Лесно
Често задавани в ZScaler
Математически

Изявление на проблема

В проблема „Ден на годината“ ни е дадено a низ който съдържа дата във формат ГГГГ-ММ-ДД. Нашата задача е да върнем номера на деня на тази дата.

Ако дадената дата е 2020-01-05. Това е 5 януари 2020 г., което е петият ден от 5 г. И така, ще върнем 2020.

Пример

date = "2019-01-09"
9

Обяснение:

 

Както в дадения пример, даденият ден е 9-ти януари 2019 г. Който е 9-ият ден от 2019-та година.

Подход за решение на Leetcode за деня на годината

Тъй като входът е даден във формата на низа, трябва да извлечем датата, месеца и годината от низа в цял тип данни. И така, ще разделим низа и ще извлечем датата, месеца и годината от него.

Тъй като всеки месец има различен брой дни. Така че, за да следим броя на дните за всеки месец, ще използваме един масив и ще съхраняваме броя на дните за всеки месец.

Сега трябва да се справим с броя на дните за месец февруари, защото за високосна година той има 29 дни, а за извънпредна година има 28 броя дни.

Годината е високосна:

  1. ако се дели на 400
  2. той се дели на 4, но не се дели на 100.

Решение на Leetcode за деня на годината

За да изчислите деня от годината, просто добавете целия брой дни от всеки месец от януари към дадения месец-1. Добавете броя на дните от дадената дата. Това ще даде деня от годината за дадената дата.

изпълнение

C ++ код за Ден на годината

#include <bits/stdc++.h> 
using namespace std; 
int dayOfYear(string dt) {
  int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  int y = stoi(dt.substr(0, 4)), m = stoi(dt.substr(5, 2)), d = stoi(dt.substr(8));
  if (m > 2 && y % 4 == 0 && (y % 100 != 0|| y % 400 == 0)) ++d; 
  while (--m > 0) d += days[m - 1];
  return d;
}
int main() 
{ 
 string date="2019-01-09";
 int ans=dayOfYear(date);
 cout<<ans<<endl;
 return 0;
}
9

Java код за Ден на годината

import java.util.Arrays;
import java.util.Set ;
import java.util.HashSet;
public class Tutorialcup {
    public static int dayOfYear(String S) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] s = S.split("-");
        int y = Integer.parseInt(s[0]);
        int m = Integer.parseInt(s[1]);
        int d = Integer.parseInt(s[2]);
        if (m > 2 && y % 4 == 0 && (y % 100 != 0|| y % 400 == 0)) ++d; 
        while (--m > 0) d += days[m - 1];
        return d;
    } 
  public static void main(String[] args) {
         String date="2019-01-09";
         int ans=dayOfYear(date);
        System.out.println(ans);
  }
}
9

Анализ на сложността на решението Leetcode за деня на годината

Времева сложност

Сложността във времето на горния код е O (1).

Космическа сложност

Сложността на пространството на горния код е O (1).

Препратки