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


我們將得到一個長度為五的字串,它表示 HH:MM 格式的時間。字串中可能包含一些‘?’,我們必須用任何數字替換它們,使得結果是有效的時間,並且是可能的最大值。此外,給定的字串數字將是有效的,並且‘:’將出現在字串的精確位置。我們將使用兩種方法:第一種是暴力方法,另一種是有效的方法。

示例

輸入 1

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

解釋

我們只有一個位置需要填充,我們可以獲得的最大時間是 12:59。

輸入 2

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

解釋

這裡有兩個空位,首先,我們將關注小時部分,我們有三個選擇 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 替換它。

讓我們看看實現上述步驟的程式碼:

示例

#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 條件和兩個函式來用適當的情況替換 ‘?’。上述程式碼的時間和空間複雜度為常數,因為我們沒有使用任何迴圈或遞迴函式。

更新於:2023年5月16日

93 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.