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 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告