সমস্যা বিবরণ
"HH:MM" ফরম্যাটে একটি টাইম দেওয়া আছে। বর্তমান টাইমের ডিজিটগুলো রি-ইউজ করে (বезবাধ ব্যবহার করে) পরবর্তী সবচেয়ে নিকটবর্তী টাইম বের করতে হবে। ২৪ ঘণ্টা ফরম্যাট।
উদাহরণ
ইনপুট: "19:34"
ডিজিটস: 1, 9, 3, 4
আউটপুট: "19:39" — কারণ ১৯:৩৯ সবচেয়ে নিকটবর্তী ভ্যালিড টাইম। ১৯:৩৩ হল ২৩ ঘণ্টা ৫৯ মিনিট পরে।
অ্যালগরিদম: ব্রুট ফোর্স (৪ নেস্টেড লুপ)
- ৪টি ডিজিট কালেক্ট করুন।
- ৪টি নেস্টেড লুপ দিয়ে সব সম্ভাব্য HH:MM কোম্বিনেশন জেনারেট করুন (৪^৪ = ২৫৬ কেস)।
- প্রতিটি কেসে:
- HH ০০-২৩, MM ০০-৫৯ rango-এ কিনা চেক করুন।
- বর্তমান টাইম থেকে ভিন্ন কিনা চেক করুন।
- মিনিটে কনভার্ট করে ডিফারেন্স বের করুন (নেগেটিভ হলে ২৪*৬০ যোগ করুন)।
- সর্বনিম্ন পজিটিভ ডিফারেন্স वालাটি রাখুন।
C++ বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int toMinutes(string t) {
int h = stoi(t.substr(0,2));
int m = stoi(t.substr(3,2));
return h * 60 + m;
}
string nextClosestTime(string time) {
vector<char> digits = {time[0], time[1], time[3], time[4]};
int cur = toMinutes(time);
int bestDiff = INT_MAX;
string ans = "";
for (char h1 : digits)
for (char h2 : digits)
for (char m1 : digits)
for (char m2 : digits) {
string cand = string() + h1 + h2 + ":" + m1 + m2;
int h = stoi(cand.substr(0,2));
int m = stoi(cand.substr(3,2));
if (h > 23 || m > 59) continue;
if (cand == time) continue;
int diff = toMinutes(cand) - cur;
if (diff < 0) diff += 24 * 60;
if (diff < bestDiff) {
bestDiff = diff;
ans = cand;
}
}
return ans.empty() ? time : ans;
}
};
int main() {
Solution ob;
cout << ob.nextClosestTime("19:34"); // আউটপুট: 19:39
return 0;
}
ইনপুট ও আউটপুট
| ইনপুট | আউটপুট |
|---|---|
"19:34" | "19:39" |
জটিলতা বিশ্লেষণ
- সময় জটিলতা: O(1) — ২৫৬ ইটারেশন (কনস্ট্যান্ট)।
- স্থান জটিলতা: O(1) — কনস্ট্যান্ট স্পেস।