मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है, हमें सबसे लंबे सबलिस्ट की लंबाई ढूंढनी है जहां 2 * सबलिस्ट का न्यूनतम > सबलिस्ट का अधिकतम।
इसलिए, यदि इनपुट nums = [10, 2, 6, 6, 4, 4] जैसा है, तो आउटपुट 4 होगा, क्योंकि सबलिस्ट [6, 6, 4,4] सबसे लंबा सबलिस्ट है जो मानदंड रखता है क्योंकि 2 * 4 > 6।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे−
ret := 0
दो डबल एंडेड क्यू minq और maxq परिभाषित करें
l := 0, r := 0
जब तक r < nums का आकार, करें
n := nums[r]
जब तक minq और n < nums[minq का अंतिम तत्व], करें
minq से अंतिम तत्व हटाएं
r को minq के अंत में डालें
जब तक maxq और n > nums[maxq का अंतिम तत्व], करें
maxq से अंतिम तत्व हटाएं
r को maxq के अंत में डालें
r := r + 1
जब तक l < r और nums[minq[0]] * 2 <= nums[maxq[0]], करें
यदि minq[0], l के समान है, तो
minq का पहला तत्व हटाएं
यदि maxq[0], l के समान है, तो
maxq का पहला तत्व हटाएं
l := l + 1
ret := ret और (r - l) का अधिकतम
ret वापस करें
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −
उदाहरण
class Solution: def solve(self, nums): from collections import deque ret = 0 minq, maxq = deque(), deque() l, r = 0, 0 while r < len(nums): n = nums[r] while minq and n < nums[minq[-1]]: minq.pop() minq.append(r) while maxq and n > nums[maxq[-1]]: maxq.pop() maxq.append(r) r += 1 while l < r and nums[minq[0]] * 2 <= nums[maxq[0]]: if minq[0] == l: minq.popleft() if maxq[0] == l: maxq.popleft() l += 1 ret = max(ret, r - l) return ret ob = Solution() nums = [10, 2, 6, 6, 4, 4] print(ob.solve(nums))
इनपुट
[10, 2, 6, 6, 4, 4]
आउटपुट
4