मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, और एक अन्य इनपुट जिसे लक्ष्य कहा जाता है, हमें सबसे छोटी सबलिस्ट का आकार इस तरह से खोजना होगा कि इसका योग मान लक्ष्य के समान या बड़ा हो। अगर ऐसा कोई सबलिस्ट नहीं है तो -1 लौटें।
इसलिए, यदि इनपुट nums =[2, 11, -4, 17, 4] लक्ष्य =19 जैसा है, तो आउटपुट 2 होगा, क्योंकि हम कम से कम 19 का योग प्राप्त करने के लिए [17, 4] का चयन कर सकते हैं।पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ps :=केवल एक तत्व वाली सूची 0
-
अंकों में प्रत्येक अंक के लिए, करें
-
ps के बाद (ps + num का अंतिम तत्व) डालें
-
यदि संख्या>=लक्ष्य, तो
-
वापसी 1
-
-
-
min_size :=inf
-
क्यू:=[0]
-
जे:=0
-
1 से लेकर ps के आकार तक के लिए, करें
-
j :=न्यूनतम j, q-1 का आकार
-
जबकि j
=लक्ष्य, करें
-
min_size :=न्यूनतम min_size और (i - q[j])
-
जे:=जे + 1
-
-
जबकि q और ps[i] <=ps[q का अंतिम तत्व], करते हैं
-
q से अंतिम तत्व हटाएं
-
-
q के अंत में i डालें
-
-
-
वापसी min_size अगर min_size
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution: def solve(self, nums, target): ps = [0] for num in nums: ps += [ps[-1] + num] if num >= target: return 1 min_size = float("inf") q = [0] j = 0 for i in range(1, len(ps)): j = min(j, len(q) - 1) while j < len(q) and ps[i] - ps[q[j]] >= target: min_size = min(min_size, i - q[j]) j += 1 while q and ps[i] <= ps[q[-1]]: q.pop() q.append(i) return min_size if min_size < float("inf") else -1 ob = Solution() nums = [2, 11, -4, 17, 4] target = 19 print(ob.solve(nums, target))
इनपुट
[2, 11, -4, 17, 4], 19
आउटपुट
2