मान लीजिए कि हमारे पास तीन सकारात्मक संख्याएँ हैं, जैसे n, निचला और ऊपरी। हमें एक सूची ढूंढनी है जिसकी लंबाई n है और वह सख्ती से बढ़ रही है और फिर सख्ती से घट रही है और सभी संख्याएं [निचले और ऊपरी] (दोनों शामिल) की सीमा में हैं। और प्रत्येक बढ़ते और घटते हिस्से को खाली होना चाहिए। हमें शब्दकोष की दृष्टि से सबसे बड़ी ऐसी सूची ढूंढनी होगी, यदि यह संभव न हो, तो खाली सूची लौटा दें।
इसलिए, यदि इनपुट n =5 निचला =3 ऊपरी =7 जैसा है, तो आउटपुट [6, 7, 6, 5, 4] होगा, यदि हम बारीकी से देखें, तो [7, 6, 5, 4, 3 ] मान्य नहीं है क्योंकि सख्ती से बढ़ता हुआ हिस्सा खाली नहीं होना चाहिए।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर n> 2 * (ऊपरी - निचला) + 1, तो
-
खाली सूची लौटाएं
-
-
c :=ऊपरी - निचला
-
घ :=1
-
अगर सी <एन, तो
-
डी:=एन - सी - 1
-
-
यदि d, 0 के समान है, तो
-
घ :=1
-
-
f :=(ऊपरी - d) से (ऊपरी -1) तक की श्रेणी से एक नई सूची
-
g :=श्रेणी से एक नई सूची (ऊपरी - n + d - 1) नीचे से ऊपर तक
-
f और g को संयोजित करें और वापस लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
def solve(n, lower, upper): if n > 2 * (upper - lower) + 1: return [] c = upper - lower d = 1 if c < n: d = n - c - 1 if d == 0: d = 1 f = list(range(upper - d, upper)) g = list(range(upper, upper - n + d, -1)) return f + g n = 5 lower = 3 upper = 7 print(solve(n, lower, upper))
इनपुट
5, 3, 7
आउटपुट
[6, 7, 6, 5, 4]