首頁 >後端開發 >C++ >最大化給定時間內的缺失值,格式為HH:MM

最大化給定時間內的缺失值,格式為HH:MM

王林
王林轉載
2023-09-07 17:41:07663瀏覽

最大化給定時間內的缺失值,格式為HH:MM

將給定的長度為五的字串表示為HH:MM格式的時間。字串中可能包含一些「?」我們必須用任何數字替換它們,以使結果成為有效的時間,且可能是最大的可能時間。此外,給定的字串數字將是有效的,並且「:」將出現在字串的確切位置。我們將首先使用蠻力法,然後使用高效方法。

範例範例

輸入 1

Given string: 12:5?
Output: 12:59

Explanation

的中文翻譯為:

解釋

我們只有一個位置需要填補,而我們能夠獲得的最大時間是12:59。

輸入2

Given string: ?0:?9
Output: 20:59

Explanation

的中文翻譯為:

解釋

我們這裡有兩個空槽,首先,我們將專注於小時部分,我們有三個選擇0、1和2來填充。對於分鐘部分,我們有從0到5的選擇,為了最大化,我們可以填充5。

方法

我們已經看過了例子,現在讓我們來看看我們可能面臨的不同類型的情況 −

  • 我們有兩個部分字串,小時部分和分鐘部分。

  • 小時部分的範圍是0到23,分鐘部分的範圍是0到59。

  • 小時部分還有更多的狀況−

    • ‘x?’ 其中 x 可以是 0、1 和 2。對於 0,我們可以選擇 0 作為最佳選擇,對於 1,我們可以選擇 9 作為最佳選擇,對於 2,我們可以選擇 3 作為最佳選擇。

    • '?x',其中x的範圍可以是0到9。如果x在0到3的範圍內,我們可以用2替換它,否則1將是最好的。

    • ‘??’ 因為我們需要最大化,所以我們將其替換為 23。

  • 會議記錄,部分還有進一步的案例 −

    • ‘x?’其中x可以在0到5的範圍內。 9將是我們最好的選擇來取代‘?’。

    • ‘?x’其中x可以在0到9的範圍內。 5將是我們最好的選擇來替換‘?’。

    • “??”,因為我們必須最大化,然後我們將其替換為 59。

讓我們來看看實作上述步驟的程式碼 -

Example

的中文翻譯為:

範例

#include <iostream>
using namespace std;
// function to replace hours
string replaceHours(string s){
   if(s[0] == '?' && s[1] == '?'){
      //Both hour characters are '?'
      // replace with the maximum hour we can achieve 
      s[0] = '2';
      s[1] = '3';
   }
   else if(s[0] == '?'){
      // if the second number of hours is in the range 0 to 3
      // replace by 2
      if(s[1] < 4){
         s[0] = '2';
      }
      else{
         s[0] = '1'; // otherwise replace by one 
      }
   }
   else if(s[1] == '?'){
      // if the first character is '2' we can go only upto 3
      if(s[0] == '2'){
         s[1] = '3';
      }
      else{
         s[1] = '9'; // else we can go for 9 
      }
   }
   return s;
}
// function to replace minutes
string replaceMinutes(string s){
   if(s[3] == '?' && s[4] == '?'){
      // both minutes characters are '?'
      // replace with maximum minutes we can acheive 
      s[3] = '5';
      s[4] = '9';
   }
   else if(s[3] == '?'){
      // we can maximum get 5 here 
      s[3] = '5';
   }
   else if(s[4] == '?'){
      // we can get maximum 9 here
      s[4] = '9';
   }
   return s;
}
int main(){
   string str = "2?:3?"; // given string 
   // calling the function for updation of the minutes 
   str = replaceMinutes(str);
   // calling to the function for updation of the hours
   str = replaceHours(str);
   // printing the final answer
   cout<<"The maximum time we can get by replacing ? is: "<< str<<endl;
   return 0;
}

輸出

The maximum time we can get by replacing ? is: 23:39

時間與空間複雜度

上述程式碼的時間複雜度為O(1)或常數,因為我們沒有使用任何循環或遞歸調用,只是檢查了if-else條件

上述程式碼的空間複雜度為O(1),因為我們沒有使用任何額外的空間。此外,對於該函數,我們傳遞的字串大小始終是固定的5。

注意:為了使程式碼更美觀或易讀,可以使用switch語句,它們不會影響時間或空間複雜度,並且會使閱讀更有效率。

此外,回溯和重新檢查是一種解決方案,但這將檢查每種情況,並且在這裡實施起來效率不高。

結論

在本教程中,我們得到了一個以24小時製表示時間的字串。字串中有一些“?”需要替換,以獲得有效的最大時間,並保證字串中的字元始終指向有效的時間。我們使用了if-else條件和兩個函數來替換“?”為適當的情況。由於我們沒有使用任何循環或遞歸函數,上述程式碼的時間和空間複雜度是恆定的。

以上是最大化給定時間內的缺失值,格式為HH:MM的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除