C++ 中的下一個最近時間


假設我們有一個以“HH:MM”格式表示的時間,我們需要透過重用當前數字來生成下一個最近的時間。我們可以無限次使用這些數字。

因此,如果輸入類似於“19:34”,則輸出將是“19:39”,因為從數字 1、9、3、4 中選擇的最接近的時間是 19:39。它不是 19:33,因為這發生在 23 小時 59 分鐘之後。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個函式 eval(),它將接收 x,

  • a := 將 x[0] 轉換為字串

  • a := a + x[1]

  • b := 將 x[2] 轉換為字串

  • b := b + x[3]

  • 返回 a 作為整數 * 60 + b 作為整數

  • 從主方法執行以下操作:

  • ret := 空字串

  • temp := 空字串

  • diff := inf

  • 定義一個數組 time

  • 將 t[0] 插入到 time 的末尾

  • 將 t[1] 插入到 time 的末尾

  • 將 t[3] 插入到 time 的末尾

  • 將 t[4] 插入到 time 的末尾

  • n := time 的大小

  • src := 空字串

  • temp1 := 空字串

  • temp2 := 空字串

  • 對於初始化 i := 0,當 i < n 時,更新(將 i 增加 1),執行:

    • src := src + time[i]

  • 對於初始化 i := 0,當 i < n 時,更新(將 i 增加 1),執行:

    • 對於初始化 j := 0,當 j < n 時,更新(將 j 增加 1),執行:

      • 對於初始化 k := 0,當 k < n 時,更新(將 k 增加 1),執行:

        • 對於初始化 l := 0,當 l < n 時,更新(將 l 增加 1),執行:

        • temp1 := time[i]

        • temp1 := temp1 + time[j]

        • temp2 := time[k]

        • temp2 := temp2 + time[l]

        • 如果 temp1 作為數字 > 23 或 temp2 作為數字 > 59,則:

          • 忽略以下部分,跳到下一次迭代

        • temp := temp1 + temp2

        • 如果 temp 等於 src,則:

          • 忽略以下部分,跳到下一次迭代

        • newDiff := eval(temp - eval(src))

        • 如果 newDiff < 0,則:

          • newDiff := newDiff + (60 * 24)

        • 如果 newDiff < diff,則:

          • diff := newDiff

          • ret := temp1 + ":" + temp2

  • 返回(如果 ret 的大小等於 0,則返回 t,否則返回 ret)

示例

讓我們看看以下實現以更好地理解:

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int eval(string x){
      string a = to_string(x[0]);
      a += x[1];
      string b = to_string(x[2]);
      b += x[3];
      return stoi(a) * 60 + stoi(b);
   }
   string nextClosestTime(string t) {
      string ret = "";
      string temp = "";
      int diff = INT_MAX;
      vector<char> time;
      time.push_back(t[0]);
      time.push_back(t[1]);
      time.push_back(t[3]);
      time.push_back(t[4]);
      int n = time.size();
      string src = "";
      string temp1 = "";
      string temp2 = "";
      for (int i = 0; i < n; i++)
         src += time[i];
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
               for (int l = 0; l < n; l++) {
                  temp1 = time[i];
                  temp1 += time[j];
                  temp2 = time[k];
                  temp2 += time[l];
                  if (stoi(temp1) > 23 || stoi(temp2) > 59)
                     continue;
                  temp = temp1 + temp2;
                  if (temp == src)
                     continue;
                  int newDiff = eval(temp) - eval(src);
                  if (newDiff < 0)
                     newDiff += (60 * 24);
                  if (newDiff < diff) {
                     diff = newDiff;
                     ret = temp1 + ":" + temp2;
                  }
               }
            }
         }
      }
      return ret.size() == 0 ? t : ret;
   }
};
main(){
   Solution ob;
   cout<<(ob.nextClosestTime("19:34"));
}

輸入

"19:34"

輸出

19:39

更新於: 2020年11月16日

274 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.