मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें एक सन्निहित कड़ाई से बढ़ती उप-सूची की अधिकतम लंबाई ज्ञात करनी होगी। हमें सूची से अधिकतम एक तत्व को हटाने की अनुमति है।
इसलिए, यदि इनपुट अंकों की तरह है =[35, 5, 6, 7, 8, 9, 12, 11, 26], तो आउटपुट 7 होगा, क्योंकि यदि हम अंकों में से 12 हटाते हैं, तो सूची [5] होगी , 6, 7, 8, 9, 11, 26], लंबाई 7 है, यह सबसे लंबी, सन्निहित, सख्ती से बढ़ती उप-सूची है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि अंक खाली हैं, तो
- वापसी 0
- अंत :=अंकों के समान आकार की एक सूची और 1 से भरें
- शुरू करें:=अंकों के समान आकार की सूची और 1 से भरें
- i के लिए 1 से लेकर अंकों के आकार -1 तक के लिए
- यदि अंक [i]> अंक [i - 1], तो
- अंत[i] :=अंत[i - 1] + 1
- यदि अंक [i]> अंक [i - 1], तो
- j के लिए अंकों के रेंज आकार में - 2 से 0, 1 से घटाएं
- यदि अंक [j + 1]> अंक [j], तो
- शुरू करें[j] :=start[j + 1] + 1
- यदि अंक [j + 1]> अंक [j], तो
- res :=अंत के अधिकतम तत्व और प्रारंभ के तत्व
- k के लिए 1 से लेकर अंकों के आकार - 2 तक, करें
- यदि अंक [के -1] <अंक [के + 1], तो
- res :=अधिकतम रेस और (end[k - 1] + start[k + 1])
- यदि अंक [के -1] <अंक [के + 1], तो
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(nums): if not nums: return 0 end = [1 for i in nums] start = [1 for i in nums] for i in range(1, len(nums)): if nums[i] > nums[i - 1]: end[i] = end[i - 1] + 1 for j in range(len(nums) - 2, -1, -1): if nums[j + 1] > nums[j]: start[j] = start[j + 1] + 1 res = max(max(end), max(start)) for k in range(1, len(nums) - 1): if nums[k - 1] < nums[k + 1]: res = max(res, end[k - 1] + start[k + 1]) return res nums = [35, 5, 6, 7, 8, 9, 12, 11, 26] print(solve(nums))
इनपुट
[35, 5, 6, 7, 8, 9, 12, 11, 26]
आउटपुट
7