Rumah >pembangunan bahagian belakang >C++ >Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu
Kami telah diberikan tatasusunan dua dimensi yang mengandungi pasangan masa mula dan tamat, mewakili selang masa 12 jam. Pada masa yang sama, kami juga diberi rentetan str yang dinyatakan dalam masa 12 jam. Kita perlu mencari jumlah bilangan selang yang mengandungi masa yang diwakili oleh 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”
3Terjemahan bahasa Cina bagi
Masa "2:30:AM" bersilang dengan tiga selang masa sebelumnya.
arr[][2] = {{“01:02:PM”, “10:55:PM”}, {“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
0Terjemahan bahasa Cina bagi
Masa "11:30:30" tidak bersilang dengan mana-mana selang masa yang diberikan dalam tatasusunan.
Dalam kaedah ini kita akan menukar masa kepada jam 24 jam. Kami kemudian akan mengira jumlah bilangan selang masa yang bersilang dengan masa yang diberikan dengan perbandingan. Tambahan pula, kami akan menggunakan kaedah substr() untuk mendapatkan substring dan kaedah stoi() untuk menukar rentetan kepada integer.
Langkah 1 - Tentukan fungsi convertTime() untuk menukar masa kepada format 24 jam.
Langkah 1.1 − Gunakan kaedah replace() untuk menggantikan kolon di kedudukan ketiga dengan rentetan kosong.
Langkah 1.2 − Dapatkan aksara pertama dan kedua yang mewakili jam daripada rentetan yang diberikan dan tukarkannya kepada jam dengan mendarab nombor pertama dengan 10 campur nombor kedua.
Langkah 1.3 - Mulakan pembolehubah 'masa_24' kepada sifar.
Langkah 1.4 − Kita perlu mengendalikan dua situasi untuk menukar masa kepada format 24 jam. Kes pertama pada sebelah pagi dan kes kedua pada sebelah petang.
Langkah 1.4.1 - Jika aksara ke-5 dalam rentetan ialah 'A', maka masanya ialah AM. Jika masa adalah AM dan jam bersamaan dengan 12, hanya minit diekstrak daripada rentetan kerana kami menganggap 12:00 AM sebagai jam 00:00. Jika tidak, tukar rentetan masa kepada nilai integer.
Langkah 1.4.2 - Jika aksara kelima dalam rentetan ialah 'P', maka masanya ialah PM. Ekstrak rentetan masa dan tukarkannya kepada integer. Selain itu, jika jam tidak sama dengan 12, 1200 ditambah pada pembolehubah 'time_24'.
Langkah 2 - Fungsi convertTime() akan mengembalikan masa dalam format berikut.
12:00:AM = 0000
12:58:AM = 0059
11:32:AM = 1132
11:32:PM = 1200 + 1132 = 2332
04:56:PM = 1200 + 456 = 1656
Jika aksara ke-5 dalam rentetan ialah 'A', masanya ialah AM. Jika masa adalah AM dan jam bersamaan dengan 12, hanya minit diekstrak daripada rentetan kerana kami menganggap 12:00 AM sebagai jam 00:00. Jika tidak, tukar rentetan masa kepada nilai integer.
Langkah 3 - Tukar rentetan masa yang diberikan kepada format 24 jam.
Langkah 4 - Gunakan gelung for untuk menggelung melalui tatasusunan selang masa dan tukar setiap rentetan masa kepada format 24 jam.
Langkah 5 - Sementara itu, teruskan periksa sama ada rentetan masa yang diberikan adalah antara selang semasa. Jika ya, tambahkan kiraan 'res' sebanyak 1.
Langkah 6 - Kembalikan nilai pembolehubah '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
Kerumitan masa - O(N) kerana kami mengulangi pelbagai selang masa.
Kerumitan ruang − O(1) kerana kami tidak menggunakan ruang tetap.
Apabila menyelesaikan masalah di atas, pengguna harus fokus pada penukaran masa kepada format 24 jam dan kemudian hanya melakukan perbandingan biasa.
Atas ialah kandungan terperinci Kira bilangan selang yang bersilang dengan masa mesyuarat tertentu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!