मान लीजिए LOL की दुनिया में, Teemo नाम का एक हीरो है और उसके हमले से उसका दुश्मन ऐश जहरीली हो सकती है। अब, मान लीजिए कि हमने ऐश की ओर टेमो की आक्रमणकारी आरोही समय श्रृंखला दी है और प्रति टेमो के आक्रमण के लिए विषाक्तता समय अवधि दी है, हमें कुल समय ज्ञात करना होगा कि ऐश जहरीली स्थिति में है। हम मान सकते हैं कि टेमो एक विशिष्ट समय बिंदु की शुरुआत में हमला करता है, और ऐश को तुरंत जहर की स्थिति में डाल देता है।
इनपुट [1,4] और 2 जैसा है, तो आउटपुट 4 होगा। तो ऐसा इसलिए है क्योंकि समय 1 पर, टेमो ऐश पर हमला करना शुरू कर देता है और ऐश को तुरंत जहर देता है। यहां यह जहरीली स्थिति समय बिंदु 2 के अंत तक 2 सेकंड तक चलेगी। और समय बिंदु 4 पर, टेमो इस दुश्मन पर फिर से हमला करता है, और ऐश को 2 सेकंड के लिए जहर की स्थिति में रखता है। तो आपको अंततः 4 आउटपुट करने की आवश्यकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- सेट सेट करें:=0
- currEnd :=-1
- n :=t का आकार
- मैं के लिए 0 से n - 1 की सीमा में
- प्रारंभ :=t[i], अंत :=t[i] + d – 1
- यदि currEnd <प्रारंभ करें, तो ret :=ret + end - start + 1, currEnd =end,
- अन्यथा रिट:=रिट + एंड - currEnd, currEnd:=end
- रिटर्न रिटर्न
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int findPoisonedDuration(vector<int>& t, int d) { int ret = 0; int currEnd = -1; int n = t.size(); for(int i = 0; i < n; i++){ int start = t[i]; int end = t[i] + d - 1; if(currEnd < start){ ret += end - start + 1; currEnd = end; } else { ret += end - currEnd; currEnd = end; } } return ret; } }; main(){ vector<int> v = {1,4}; Solution ob; cout << (ob.findPoisonedDuration(v, 2)); }
इनपुट
[1,4] 4
आउटपुट
4