मान लीजिए हमारे पास arr नामक एक सरणी है। हमें arr पर कुछ ऑपरेशन करने हैं ताकि यह इन शर्तों को पूरा करे:
arr का पहला तत्व 1 होना चाहिए।
किसी भी 2 आसन्न तत्वों के बीच का निरपेक्ष अंतर अधिकतम 1 होना चाहिए।
और दो ऑपरेशन हैं। हम इन दो प्रकार के ऑपरेशन को कितनी भी बार कर सकते हैं:
arr के किसी भी मान को छोटी धनात्मक संख्या में घटाएं।
arr के तत्वों को किसी भी क्रम में पुनर्व्यवस्थित करें।
हमें दी गई शर्तों को पूरा करने के लिए ऑपरेशन करने के बाद arr में अधिकतम संभव मान ढूंढना है।
उदाहरण के लिए, यदि इनपुट है arr = [3,3,2,3,2], तो आउटपुट 3 होगा क्योंकि, हम अंतिम तत्व को 1 से घटा सकते हैं, फिर उन्हें [1,2,3,3,3] की तरह पुनर्व्यवस्थित कर सकते हैं, और अधिकतम 3 है।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्न चरणों का पालन करेंगे:
सूची arr को सॉर्ट करें
arr[0] := 1
i के लिए 1 से arr के आकार - 1 तक लूप चलाएं
arr[i] := min(arr[i-1] + 1, arr[i]) का न्यूनतम
arr का अधिकतम लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(arr):
arr.sort()
arr[0] = 1
for i in range(1, len(arr)):
arr[i] = min(arr[i - 1] + 1, arr[i])
return max(arr)
arr = [3,3,2,3,2]
print(solve(arr))इनपुट
[3,3,2,3,2]
आउटपुट
3