मान लीजिए कि हमारे पास एक एरे ए है, हम इसे के द्वारा घुमा सकते हैं ताकि एरे ए [के], ए [के + 1], ए {के + 2], ... ए [ए। लम्बाई - 1] बन जाए। ए [0], ए [1], ..., ए [के -1]। फिर, कोई भी प्रविष्टि जो उनकी अनुक्रमणिका से कम या उसके बराबर है, 1 अंक के लायक है।
तो उदाहरण के लिए, हमारे पास एक सरणी [2, 4, 1, 3, 0] है, और हम के =2 से घुमाते हैं, यह [1, 3, 0, 2, 4] बन जाता है। यह 3 अंक के लायक है क्योंकि 1> 0 [लाभ नहीं], 3> 1 [लाभ नहीं], 0 <=2 [एक अंक हासिल करें], 2 <=3 [एक अंक हासिल करें], 4 <=4 [लाभ एक बिंदु]।
हमें K ज्ञात करना है, जिसके लिए हमें सर्वोच्च अंक प्राप्त होंगे। यदि एक से अधिक उत्तर हैं, तो ऐसा सबसे छोटा सूचकांक K लौटाएँ। इसलिए, यदि इनपुट K =2 जैसा है, तो उत्तर 5 होगा।
तो अगर इनपुट [2,3,1,5,1] जैसा है, तो आउटपुट 3 होगा, ऐसा इसलिए है क्योंकि -
K | सरणी | स्कोर |
---|---|---|
0 | [2,3,1,5,1] | 2 |
1 | [3,1,5,1,2] | 3 |
2 | [1,5,1,2,4] | 3 |
3 | [5,1,2,4,1] | 4 |
4 | [1,2,4,1,3] | 3 |
उत्तर 3 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- रिट:=0
- n :=A का आकार
- एक सरणी को परिभाषित करें जिसका आकार n है
- इनिशियलाइज़ i :=0 के लिए, जब i
करें - यदि A[i] <=i, तो −
- न्यूनतम:=0, (cnt[minI] 1 से बढ़ाएं)
- अधिकतम:=i - A[i]
- यदि अधिकतम I + 1
- cnt[maxI + कमी 1] 1 से
- यदि i + 1
- cnt[i + 1 की वृद्धि] 1 से
- यदि A[i] <=i, तो −
- यदि A[i]>=n, तो −
- निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
- मिनी:=i + 1
- (cnt[minI] 1 से बढ़ाएं)
- मैक्सी :=i + (n - A[i])
- यदि मैक्सी + 1 <एन, तो −
- cnt[मैक्सी + 1 घटाएं] 1 तक
- maxCnt:=अस्थायी
- रिट:=मैं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int bestRotation(vector<int>& A) { int ret = 0; int n = A.size(); vector <int> cnt(n); for(int i = 0; i < n; i++){ if(A[i] <= i){ int minI = 0; cnt[minI]++; int maxI = i - A[i]; if(maxI + 1 < n) cnt[maxI + 1]--; if(i + 1 < n) cnt[i + 1]++; }else{ if(A[i] >= n) continue; int minI = i + 1; cnt[minI]++; int maxi = i + (n - A[i]); if(maxi + 1 < n)cnt[maxi + 1]--; } } int maxCnt = -1; int temp = 0; for(int i = 0; i < n; i++){ temp += cnt[i]; if(temp > maxCnt){ maxCnt = temp; ret = i; } } return ret; } }; main(){ Solution ob; vector<int> v = {2,3,1,5,1}; cout << (ob.bestRotation(v)); }
इनपुट
[2,3,1,5,1]
आउटपुट
3