首頁 > 後端開發 > C++ > 計算與給定會議時間相交的區間數

計算與給定會議時間相交的區間數

王林
發布: 2023-08-31 20:13:04
轉載
723 人瀏覽過

計算與給定會議時間相交的區間數

問題陳述

我們已經給了一個包含起始和結束時間對的二維數組,表示12小時制的時間間隔。同時,我們也給了一個以12小時製表示的字串 str。我們需要找出包含由 str 表示的時間的總間隔數。

範例範例

輸入

arr[][2] = {{“12:02:AM”, “10:55:PM”}, 
{“12:51:AM”, “11:40:AM”}, 
{“01:30:AM”, “12:00:PM”}, 
{“11:57:PM”, “11:59:PM”}}, 
str = “2:30:AM”
登入後複製

輸出

3
登入後複製

Explanation

的中文翻譯為:

解釋

時間「2:30:AM」與前三個時間間隔相交。

輸入

arr[][2] = {{“01:02:PM”, “10:55:PM”}, 
{“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
登入後複製

輸出

0
登入後複製

Explanation

的中文翻譯為:

解釋

時間「11:30:PM」與陣列中給定的任何時間間隔不相交。

方法一

在這個方法中,我們將把時間轉換為24小時制。然後,我們將透過比較來計算與給定時間相交的時間間隔的總數。此外,我們將使用substr()方法來取得子字串,並使用stoi()方法將字串轉換為整數。

演算法

  • 步驟 1 - 定義convertTime()函數,用於將時間轉換為24小時制。

  • 步驟 1.1 − 使用replace()方法將第三個位置的冒號替換為空字串。

  • 步驟1.2 − 從給定的字串中取得表示小時的第一個和第二個字符,並透過將第一個數字乘以10再加上第二個數字將其轉換為小時。

  • 步驟 1.3 - 將 'time_24' 變數初始化為零。

  • 步驟 1.4 − 我們需要處理兩種情況來將時間轉換為24小時制。第一種情況是上午,第二種情況是下午。

  • 步驟 1.4.1 - 如果字串中的第5個字元是'A',則時間為上午。如果時間為上午,且小時等於12,則從字串中僅提取分鐘,因為我們將12:00 AM視為00:00小時。否則,將時間字串轉換為整數值。

  • 步驟 1.4.2 - 如果字串中的第五個字元是 'P',則時間為下午。提取時間字串,並將其轉換為整數。此外,如果小時不等於 12,則將 1200 加到 'time_24' 變數中。

  • 第二步 - convertTime()函數將以以下格式傳回時間。

    • 12:00:AM = 0000

    • #12:58:AM = 0059

    • #11:32:AM = 1132

    • #11:32:PM = 1200 1132 = 2332

    • 04:56:PM = 1200 456 = 1656

    • 如果字串中的第5個字元是'A',則時間為上午。如果時間是上午,且小時等於12,則從字串中僅提取分鐘,因為我們將12:00 AM視為00:00小時。否則,將時間字串轉換為整數值。

  • 第三步 - 將給定的時間字串轉換為24小時制格式。

  • 第四步 - 使用for迴圈遍歷時間間隔數組,並將每個時間字串轉換為24小時制。

  • 第5步 - 同時,繼續檢查給定的時間字串是否在目前間隔之間。如果是,則將'res'的計數增加1。

  • 第六步 - 傳回‘res’變數的值。

Example

的翻譯為:

範例

#include <bits/stdc++.h>
using namespace std;
// Function to convert the given time_24 in 24 hours format
int convertTime(string str){
   // Remove the colon from the string
   str.replace(2, 1, "");
   // Stores the hour
   int char_h1 = (int)str[1] - '0';
   int char_h2 = (int)str[0] - '0';
   int hours = (char_h2 * 10 + char_h1 % 10);
   // variable to store the time in 24 hours format
   int time_24 = 0;
   // If the time is in "AM."
   if (str[5] == 'A'){
      // If hours are equal to 12, then update it to 0 as 12 AM, and only minutes to time_24
      if (hours == 12){
         time_24 += stoi(str.substr(2, 2));
      } else {
         // add hours and minutes to time_24
         time_24 += stoi(str.substr(0, 4));
      }
   }
   // If time is in "PM"
   else {
      // If hours is equal to 12, add time as it is to time_24
      if (hours == 12){
         time_24 += stoi(str.substr(0, 4));
      } else {
         // add time to time_24
         time_24 += stoi(str.substr(0, 4));
         // add 1200 = 12 : 00 PM to time_24 to convert in 24 hours format.
         time_24 += 1200;
      }
   }
   return time_24;
}
// Function to find the total number of intervals that intersects with given meeting time_24
int totalIntersects(string arr[][2], int len, string str){
   // to store the total number of intervals
   int res = 0;
   // convert the given time_24 in 24 hours format
   int convertedStr = convertTime(str);
   // Traverse the array
   for (int i = 0; i < len; i++){
      // convert the starting time_24 of the current interval in 24-hour format
      int initial = convertTime(arr[i][0]);
      // convert the ending time_24 of the current interval in 24-hour format
      int end = convertTime(arr[i][1]);
      // If the given time_24 lies in the interval [initial, end], then increment res by 1
      if ((initial <= convertedStr && convertedStr <= end) || (convertedStr >= end && convertedStr <= initial))
         res++;
   }
   // Return res
   return res;
}
int main(){
   string arr[][2] = {{"11:00:AM", "11:55:PM"},
                       {"12:19:AM", "9:30:AM"},
                       {"12:51:AM", "12:59:PM"},
                       {"6:57:AM", "7:50:PM"}};
   string str = "12:54:AM";
   int len = sizeof(arr) / sizeof(arr[0]);
   cout << "The total number of the interval that intersects with given meeting time_24 are - " << totalIntersects(arr, len, str) << endl;
}
登入後複製

輸出

The total number of the interval that intersects with given meeting time_24 are - 2
登入後複製
  • 時間複雜度 - O(N),因為我們遍歷時間間隔的陣列。

  • 空間複雜度 − O(1),因為我們不使用常數空間。

在解決上述問題時,使用者應主要專注於將時間轉換為24小時制,然後只需進行正常的比較。

以上是計算與給定會議時間相交的區間數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板