ধরুন আমাদের কাছে "ঘন্টা:মিনিট" বিন্যাসে 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