मान लीजिए कि हमारे पास "घंटे:मिनट" प्रारूप में 24 घंटे के घड़ी के समय बिंदुओं की एक सूची है, हमें सूची में किसी भी दो समय बिंदुओं के बीच न्यूनतम मिनट का अंतर खोजना होगा। तो अगर इनपुट ["12:30",,"15:17"] जैसा है, तो यह 167 लौटाएगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- 24*60 + 1 आकार के ओके नामक एक सरणी को परिभाषित करें, और प्रारंभ में सभी गलत हैं।
- n :=tp का आकार
- मैं के लिए 0 से n - 1 की सीमा में
- घंटा :=समय से घंटा भाग
- मिनट :=स्ट्रिंग का मिनट हिस्सा
- समय :=घंटा * 60 + मिनट
- यदि ठीक है [समय] सत्य है, तो 0 लौटाएं, अन्यथा ठीक [समय] को सत्य के रूप में सेट करें।
- अंतिम :=0, प्रथम :=inf, ret :=inf, पिछला :=-inf
- मेरे लिए 0 से 24*60 की सीमा में
- अगर ठीक है[i] सच है, तो
- अंतिम:=अधिकतम मैं, अंतिम
- पहला :=मैं और पहले का मिनट
- यदि पिछला –inf नहीं है, तो रिट :=मिनट का रिट और अंतिम – पिछला
- पिछला :=मैं
- अगर ठीक है[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