我們已經給了一個包含起始和結束時間對的二維數組,表示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
時間「2:30:AM」與前三個時間間隔相交。
arr[][2] = {{“01:02:PM”, “10:55:PM”}, {“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
0
時間「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’變數的值。
#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中文網其他相關文章!