मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें सबसे लंबी उपसूची की लंबाई का पता लगाना होगा जहां 2 * न्यूनतम उपसूची> अधिकतम उपसूची।
इसलिए, यदि इनपुट अंकों की तरह है =[10, 2, 6, 6, 4, 4], तो आउटपुट 4 होगा, क्योंकि सबलिस्ट [6, 6, 4,4] सबसे लंबी सबलिस्ट है जो मानदंड रखती है 2*4>6 के रूप में।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे-
-
रिट:=0
-
दो डबल एंडेड कतारों को परिभाषित करें minq और maxq
-
एल:=0, आर:=0
-
जबकि r <अंकों का आकार, करें
-
एन:=अंक [आर]
-
जबकि minq और n
-
minq से अंतिम तत्व हटाएं
-
-
minq के अंत में r डालें
-
जबकि maxq और n> nums[maxq का अंतिम तत्व], करते हैं
-
maxq से अंतिम तत्व हटाएं
-
-
maxq के अंत में r डालें
-
आर:=आर + 1
-
जबकि l
-
अगर minq[0] l के समान है, तो
-
minq का पहला तत्व हटाएं
-
-
अगर maxq[0] l के समान है, तो
-
maxq का पहला तत्व हटाएं
-
-
एल :=एल + 1
-
-
रिट :=अधिकतम रिट और (आर - एल)
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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