मान लीजिए हमारे पास तीन पॉजिटिव संख्याएं हैं, मान लीजिए n, lower, और upper। हमें एक लिस्ट ढूंढनी है जिसकी लंबाई n है और जो सख्ती से बढ़ रही है और फिर सख्ती से घट रही है और सभी संख्याएं रेंज [lower और upper] (दोनों समावेशी) में हैं। और प्रत्येक बढ़ते और घटते भाग नॉन-खाली होने चाहिए। हमें लेक्सिकोग्राफिकली सबसे बड़ी ऐसी लिस्ट ढूंढनी है, यदि यह संभव नहीं है, तो खाली लिस्ट लौटाएं।
उदाहरण के लिए, यदि इनपुट है n = 5, lower = 3, upper = 7, तो आउटपुट होगा [6, 7, 6, 5, 4], यदि हम बारीकी से देखें, तो [7, 6, 5, 4, 3] वैध नहीं है क्योंकि सख्ती से बढ़ने वाला भाग नॉन-खाली होना चाहिए।
समाधान दृष्टिकोण
माउंटेन सरणी के लिए शर्त: n <= 2*(upper - lower) + 1। पीक upper पर होना चाहिए। लेक्सिकोग्राफिकली सबसे बड़ा बनाने के लिए, हम पीक से जितना संभव हो उतना दूर शुरू करते हैं।
- यदि
n > 2*(upper - lower) + 1, तो खाली लिस्ट लौटाएं। c = upper - lower,d = 1की गणना करें।- यदि
c < n, तोd = n - c - 1। - यदि
d == 0, तोd = 1। - बढ़ता भाग:
range(upper - d, upper)। - घटता भाग:
range(upper, upper - n + d, -1)। - दोनों को जोड़कर लौटाएं।
पायथन कार्यान्वयन
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]