Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแตกต่างของเวลาขั้นต่ำใน C++


สมมติว่าเรามีรายการจุดเวลานาฬิกาแบบ 24 ชั่วโมงในรูปแบบ "ชั่วโมง:นาที" เราต้องหาความแตกต่างของนาทีขั้นต่ำระหว่างจุดเวลาสองจุดใดๆ ในรายการ ดังนั้นหากอินพุตเป็น [“12:30”,”15:17”] ก็จะคืนค่า 167

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดอาร์เรย์ที่เรียกว่า ok ขนาด 24*60 + 1 และเริ่มต้นทั้งหมดเป็นเท็จ
  • n :=ขนาดของ tp
  • สำหรับ i ในช่วง 0 ถึง n – 1
    • hr :=ส่วนชั่วโมงนับจากเวลา
    • นาที :=ส่วนนาทีของสตริง
    • เวลา :=ชม. * 60 + นาที
    • ถ้า ok[time] เป็นจริง ให้คืนค่า 0 มิฉะนั้น ให้ตั้งค่า ok[time] เป็นจริง
  • สุดท้าย :=0, แรก :=inf, ret :=inf, ก่อนหน้า :=-inf
  • สำหรับ i ในช่วง 0 ถึง 24*60
    • ถ้า ok[i] เป็นจริง แล้ว
      • สุดท้าย :=สูงสุดของ i สุดท้าย
      • first :=min ของ i และ first
      • ถ้า prev ไม่ใช่ –inf ให้ ret :=min ของ ret และ last – prev
      • ก่อนหน้า :=ผม
  • ผลตอบแทนขั้นต่ำของ ret และ 24*60+ก่อน-สุดท้าย

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น &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