Computer >> Máy Tính >  >> Lập trình >> C ++

Chênh lệch thời gian tối thiểu trong C ++

Giả sử chúng ta có một danh sách các mốc thời gian 24 giờ trên đồng hồ ở định dạng "Giờ:Phút", chúng ta phải tìm chênh lệch số phút tối thiểu giữa hai mốc thời gian bất kỳ trong danh sách. Vì vậy, nếu đầu vào giống như [“12:30”, ”15:17”], thì điều này sẽ trả về 167.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một mảng được gọi là ok có kích thước 24 * 60 + 1 và ban đầu tất cả đều sai.
  • n:=kích thước của tp
  • cho tôi trong phạm vi từ 0 đến n - 1
    • hr:=phần giờ của thời gian
    • min:=phần phút của chuỗi
    • thời gian:=giờ * 60 + phút
    • nếu ok [time] là true thì trả về 0, nếu không thì đặt ok [time] là true.
  • cuối cùng:=0, đầu tiên:=inf, ret:=inf, trước:=-inf
  • cho tôi trong phạm vi từ 0 đến 24 * 60
    • nếu ok [i] là true, thì
      • cuối cùng:=tối đa của tôi, cuối cùng
      • first:=phút của tôi và lần đầu tiên
      • nếu trước đó không phải là –inf, thì ret:=tối thiểu trong tổng số lần truy cập và cuối cùng - trước đó
      • trước:=i
  • trả về tối thiểu ret và 24 * 60 + first-last.

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn &mnus;

Ví dụ

#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));
}

Đầu vào

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

Đầu ra

167