मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। हम इन कार्यों को कितनी भी बार कर सकते हैं -
-
कोई धनात्मक पूर्णांक k चुनें
-
क्रम में किसी भी स्थिति का चयन करें और उस स्थिति में k डालें
-
तो, क्रम बदल गया है, हम अगले ऑपरेशन में इस क्रम के साथ आगे बढ़ते हैं।
हमें शर्त को पूरा करने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ज्ञात करनी होगी:A[i] <=i सभी के लिए i जो 0 से n-1 की सीमा में है।
इसलिए, यदि इनपुट ए =[1, 2, 5, 7, 4] की तरह है, तो आउटपुट 3 होगा, क्योंकि हम इस तरह के ऑपरेशन कर सकते हैं:[1,2,5,7,4] से [1] ,2,3,5,7,4] से [1,2,3,4,5,7,4] से [1,2,3,4,5,3,7,4] तक।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
maxj := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: maxj := maximum of maxj and (A[i] - i - 1) return maxj
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A) { int maxj = 0; int n = A.size(); for (int i = 0; i < n; i++) { maxj = max(maxj, A[i] - i - 1); } return maxj; } int main() { vector<int> A = { 1, 2, 5, 7, 4 }; cout << solve(A) << endl; }
इनपुट
{ 1, 2, 5, 7, 4 }
आउटपुट
3