मान लीजिए हमारे पास 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
- जब तक i >= 0 और j >= 0, करें
- यदि l1[i], l2[j] के समान है, तो
- res := res + 1, i := i - 1, j := j - 1
- अन्यथा जब l1[i] < l2[j], तो
- यदि i > 0 शून्येतर है, तो
- l1[i - 1] := l1[i - 1] + l1[i]
- i := i - 1
- यदि i > 0 शून्येतर है, तो
- अन्यथा जब l1[i] > l2[j], तो
- यदि j > 0, तो
- l2[j - 1] := l2[j - 1] + l2[j]
- j := j - 1
- यदि j > 0, तो
- यदि l1[i], l2[j] के समान है, तो
- यदि i, -1 के समान है और j, -1 के समान है तो res वापस करें अन्यथा -1 वापस करें
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −
उदाहरण
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