פתרון ה- Leetcode ליום השנה


רמת קושי קַל
נשאל לעתים קרובות ZScaler
מתמטיקה

הצהרת בעיה

בבעיה "יום השנה" ניתן לנו מחרוזת המכיל תאריך בפורמט YYYY-MM-DD. המשימה שלנו היא להחזיר את מספר היום של תאריך זה.

אם התאריך הנתון הוא 2020-01-05. זהו 5 בינואר 2020 שהוא היום החמישי של שנת 5. אז נחזור 2020.

דוגמה

date = "2019-01-09"
9

הסבר:

 

כמו בדוגמה הנתונה, היום הנתון הוא 9 בינואר 2019. שזה היום ה -9 בשנה 2019. אז התשובה היא 9.

גישה לפתרון 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

קוד ג'אווה ליום השנה

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).

הפניות