当前位置: 首页 > 编程笔记 >

C ++中的最小时差

陈季
2023-03-14
本文向大家介绍C ++中的最小时差,包括了C ++中的最小时差的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个“小时:分钟”格式的24小时制时钟点列表,我们必须找到列表中任何两个时间点之间的最小分钟差。因此,如果输入类似于[“ 12:30”,“ 15:17”],则返回167。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个大小为24 * 60 + 1的名为ok的数组,并且最初都为假。

  • n:= tp的大小

  • 对于i,范围为0至n – 1

    • hr:=从时间开始的小时部分

    • min:=字符串的分钟部分

    • 时间:=小时* 60 +分钟

    • 如果ok [time]为true,则返回0,否则将ok [time]设置为true。

  • 最后一个:= 0,第一个:= inf,ret:= inf,上一个:= -inf

  • 适用于0到24 * 60范围内的i

    • 最后:=我的最大值,最后

    • 第一:=我的第一和第二

    • 如果prev不是–inf,则ret:= ret的最小值,最后一次– prev

    • 上一个:=我

    • 如果ok [i]为真,则

  • 返回最小的ret和24 * 60 + first-last。

让我们看下面的实现,以更好地了解&mnus;

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int findMinDifference(vector<string>& tp) {
      vector <bool> ok(24 * 60 + 1, false);
      int n = tp.size();
      for(int i = 0; i < n; i++){
         int hr = stoi(tp[i].substr(0, 2));
         int min = stoi(tp[i].substr(3, 2));
         int time = hr * 60 + min;
         if(ok[time]) return 0;
         ok[time] = true;
      }
      int last = 0;
      int first = INT_MAX;
      int ret = INT_MAX;
      int prev = INT_MIN;
      for(int i = 0; i <= 24 * 60; i++){
         if(ok[i]){
            last = max(i, last);
            first = min(i, first);
            if(prev != INT_MIN) ret = min(ret, last - prev);
            prev = i;
         }
      }
      return min(ret, 24 * 60 + first - last);
   }
};
main(){
   vector<string> v = {"12:30","15:17"};
   Solution ob;
   cout << (ob.findMinDifference(v));
}

输入值

["12:30","15:17"]

输出结果

167
 类似资料:
  • 本文向大家介绍C ++中的最小加油站数,包括了C ++中的最小加油站数的使用技巧和注意事项,需要的朋友参考一下 假设有一辆汽车,从起始位置行驶到距起始位置以东t英里的目的地。 现在,沿途有许多加油站。因此,每个加油站[i]代表加油站,该加油站位于起始位置以东的加油站[i] [0]英里处,并且该加油站的加油站数为[i] [1]升。 如果汽车以无限大的油箱启动,那么最初的油箱中将装有燃油。它每行驶1英

  • 我正在编写一个代码,用户会被问到:“有多少个标记?”然后他们输入他们提到的分数。然后,它打印出最大标记和最小标记。 我不是最擅长编码的,所以我没有方向去寻找循环中的最大值和最小值。我找到了他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我查找了如何进行最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。

  • 本文向大家介绍C ++中最小K总和最短的子数组,包括了C ++中最小K总和最短的子数组的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到A的最短,非空,连续子数组的长度,其总和至少为K。如果没有这样的子数组,则返回-1。 因此,如果输入类似于[5,3,-2,2,1]且k = 6,则输出将为2,如我们所见(5 + 3)> = 6 为了解决这个问题,我们将遵循以下步骤- n:

  • 本文向大家介绍C#获取数组中最大最小值的方法,包括了C#获取数组中最大最小值的方法的使用技巧和注意事项,需要的朋友参考一下 根据下面函数获取数组中最大最小值即可。调用时候直接传数组范围一个float类型的变量  

  • 我试过下面的程序。创建此程序的目的是了解有关堆栈大小的更多信息。 执行上述代码后,由于堆栈大小分配过大,程序崩溃。堆栈的最大可能大小是多少?是否为每个程序/计算机固定?可以增加吗? 我想知道是为了知识。如果有人能提供C/C中的例子,那将是非常有帮助的。

  • 我实现了c程序,可以找到矩阵的元素:行的最大元素,同时列的最小元素,或行的-min元素,同时列的最大元素。例如,我们有数据。包含以下内容的txt文件: 4 7 8 9 10 6 5 4 11 5 0 1 12 4 2 7 13- 其中4是n-矩阵大小(4x4),7和10是这些数字。 下面是代码: 问题:我想知道我的代码是不是“脏”代码?因为我总是渴望让一切变得如此困难,只要有可能让它变得容易。是否