Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khoảng cách thời gian nhỏ nhất (Minimum Time Difference) trong C++

Cho danh sách thời gian định dạng "HH:MM" (24h), tìm khoảng cách phút nhỏ nhất giữa hai thời gian bất kỳ.

Ví dụ: ["12:30","15:17"] → 167 phút.

Thuật toán (Mảng đánh dấu + Duyệt tuyến tính)

  1. Mảng ok[1441] đánh dấu phút đã xuất hiện.
  2. Chuyển mỗi thời gian thành phút hh*60+mm. Nếu trùng → trả về 0.
  3. Duyệt qua 1440 phút, tính khoảng cách giữa các thời gian liên tiếp, và khoảng cách vòng tròn (cuối - đầu + 1440).

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findMinDifference(vector<string>& tp) {
        vector<bool> ok(24*60+1, false);
        for (string& t : tp) {
            int hr = stoi(t.substr(0,2));
            int mn = stoi(t.substr(3,2));
            int time = hr*60 + mn;
            if (ok[time]) return 0;
            ok[time] = true;
        }
        int first = INT_MAX, last = 0, prev = INT_MIN, ret = INT_MAX;
        for (int i = 0; i <= 24*60; i++) {
            if (ok[i]) {
                first = min(first, i);
                last = max(last, i);
                if (prev != INT_MIN) ret = min(ret, i - prev);
                prev = i;
            }
        }
        return min(ret, 24*60 + first - last);
    }
};

int main() {
    vector<string> v = {"12:30","15:17"};
    Solution ob;
    cout << ob.findMinDifference(v);
    return 0;
}

Đầu vào / Đầu ra

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

Output: 167