मान लीजिए कि हमारे पास दो सूचियाँ l1 और l2 हैं, हमें इस ऑपरेशन को बार-बार लागू करके सूचियों को समान बनाना है - एक सबलिस्ट चुनें, और पूरी सबलिस्ट को उसके योग से बदलें। अंत में उपरोक्त संचालन को लागू करने के बाद सबसे लंबी परिणामी सूची का आकार वापस कर दें। अगर कोई समाधान नहीं है, तो -1 लौटें।
इसलिए, यदि इनपुट l1 =[1, 4, 7, 1, 2, 10] l2 =[5, 6, 1, 3, 10] जैसा है, तो आउटपुट 4 होगा, जैसे कि हम इस ऑपरेशन को करते हैं इस प्रकार है -
- l1 की सबलिस्ट लें [1, 4] हमें [5, 7, 1, 2, 10] मिलता है
- l1 की सबलिस्ट लें [1, 2] हमें [5, 7, 3, 10] मिलता है
- l2 की सबलिस्ट लें [6, 1] हमें [5, 7, 3, 10] मिलता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- i :=l1-1 का आकार, j :=l2-1 का आकार, res :=0
- जबकि मैं>=0 और j>=0, करते हैं
- अगर l1[i] l2[j] के समान है, तो
- res :=res + 1, i :=i-1, j :=j-1
- अन्यथा जब l1[i]
- यदि i> 0 शून्य नहीं है, तो
- l1[i - 1] :=l1[i - 1] + l1[i]
- i :=i - 1
- यदि i> 0 शून्य नहीं है, तो
- अगर l1[i] l2[j] के समान है, तो
- अन्यथा जब l1[i]> l2[j], तब
- अगर j> 0, तो
- l2[j - 1] :=l2[j - 1] + l2[j]
- j :=j-1
- अगर j> 0, तो
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, l1, l2): i, j, res = len(l1) - 1, len(l2) - 1, 0 while i >= 0 and j >= 0: if l1[i] == l2[j]: res, i, j = res + 1, i - 1, j - 1 elif l1[i] < l2[j]: if i > 0: l1[i - 1] += l1[i] i -= 1 elif l1[i] > l2[j]: if j > 0: l2[j - 1] += l2[j] j -= 1 return res if i == -1 and j == -1 else -1 ob = Solution() l1 = [1, 4, 7, 1, 2, 10] l2 = [5, 6, 1, 3, 10] print(ob.solve(l1, l2))
इनपुट
[1, 4, 7, 1, 2, 10], [5, 6, 1, 3, 10]
आउटपुट
4