Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ . में उच्चतम स्कोर के साथ सबसे छोटा रोटेशन

मान लीजिए कि हमारे पास एक एरे ए है, हम इसे के द्वारा घुमा सकते हैं ताकि एरे ए [के], ए [के + 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]>=n, तो −
      • निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
    • मिनी:=i + 1
    • (cnt[minI] 1 से बढ़ाएं)
    • मैक्सी :=i + (n - A[i])
    • यदि मैक्सी + 1 <एन, तो −
      • cnt[मैक्सी + 1 घटाएं] 1 तक
  • maxCnt:=-1, अस्थायी:=0
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • अस्थायी:=अस्थायी + सीएनटी[i]
  • अगर अस्थायी> मैक्ससीएनटी, तो −
    • 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

    1. C++ में किसी अन्य बिंदु के बारे में एक बिंदु का घूमना

      मूल बिंदु के बारे में एक बिंदु X का घूर्णन एक कोण से होता है घड़ी की विपरीत दिशा में − . द्वारा किया जाता है X by उत्पत्ति के बारे में यहां, सम्मिश्र संख्याओं के लिए फंक्शन पोलर को हेडर फाइल के तहत परिभाषित किया गया है और इसका उपयोग फेज एंगल और परिमाण का उपयोग करके एक कॉम्प्लेक्स नंबर खोजने के

    1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

      मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे

    1. C++ में सभी गहरे नोड्स के साथ सबसे छोटा सबट्री

      मान लीजिए कि हमारे पास एक बाइनरी ट्री है जिसकी जड़ें जड़ में हैं, प्रत्येक नोड की गहराई जड़ से सबसे छोटी दूरी है। यहां एक नोड सबसे गहरा है यदि पूरे पेड़ में किसी भी नोड के बीच इसकी सबसे बड़ी गहराई संभव है। एक नोड का उपप्रकार वह नोड है, साथ ही उस नोड के सभी वंशजों का समूह। हमें नोड को सबसे बड़ी गहराई