ধরুন আমাদের কাছে "ঘন্টা:মিনিট" বিন্যাসে 24-ঘন্টা ঘড়ির সময় পয়েন্টের একটি তালিকা আছে, আমাদের তালিকার যেকোনো দুটি সময় পয়েন্টের মধ্যে ন্যূনতম মিনিটের পার্থক্য খুঁজে বের করতে হবে। সুতরাং ইনপুট যদি [“12:30”,”15:17”] এর মত হয়, তাহলে এটি 167 রিটার্ন করবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- 24*60 + 1 আকারের ok নামক একটি অ্যারে সংজ্ঞায়িত করুন, এবং প্রাথমিকভাবে সব মিথ্যা।
- n :=tp এর আকার
- আমি 0 থেকে n – 1
- পরিসরে
- hr :=সময় থেকে ঘণ্টার অংশ
- মিনিট :=স্ট্রিং এর মিনিট অংশ
- সময় :=ঘণ্টা * ৬০ + মিনিট
- যদি ঠিক আছে [সময়] সত্য হয়, তাহলে 0 ফেরত দিন, অন্যথায় ঠিক আছে [সময়] সত্য হিসাবে সেট করুন।
- শেষ :=0, প্রথম :=inf, ret :=inf, আগের :=-inf
- আমি 0 থেকে 24*60 রেঞ্জের জন্য
- যদি ঠিক আছে[i] সত্য হয়, তাহলে
- শেষ :=i এর সর্বোচ্চ, শেষ
- প্রথম :=i এবং প্রথমের মিনিট
- যদি prev-inf না হয়, তাহলে ret :=ret এর মিনিট এবং শেষ - prev
- আগের :=i
- যদি ঠিক আছে[i] সত্য হয়, তাহলে
- সর্বনিম্ন রিটার্ন এবং 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