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

सी ++ में ऐरे परिवर्तन


मान लीजिए कि एक प्रारंभिक सरणी गिरफ्तारी है, मान लें कि हर दिन हम पिछले दिन की सरणी का उपयोग करके एक नई सरणी बनाते हैं। i-वें दिन, हम दिन i की सरणी बनाने के लिए दिन i-1 की सरणी पर निम्नलिखित कार्य करेंगे I शर्तें इस प्रकार हैं -

  • यदि कोई तत्व उसके बाएँ और दाएँ आसन्न मानों से छोटा है, तो यह तत्व बढ़ा हुआ है।

  • यदि कोई तत्व उसके बाएँ और दाएँ आसन्न मानों से बड़ा है, तो यह तत्व घटा हुआ है।

  • पहला और आखिरी तत्व वही रहेगा।

कुछ दिनों के बाद, सरणी अब और नहीं बदलती है। उस अंतिम सरणी को खोजें। तो यदि प्रारंभिक सरणी [6,2,3,4] है तो आउटपुट [6,3,3,4] है। पहले दिन, ऐरे को [6,2,3,4] से [6,3,3,4] में बदल दिया जाएगा, फिर कोई और ऑपरेशन नहीं किया जाएगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • यदि सरणी का आकार 2 या 2 से कम है, तो सरणी लौटाएं
  • झंडा सेट करें:=सच
  • जबकि झंडा सही है -
    • झंडा सेट करें:=झूठा
    • अस्थायी नामक एक खाली सरणी बनाएं, और arr[0] को अस्थायी में डालें
    • i श्रेणी 1 से सरणी आकार के लिए - 1
      • अगर arr[i]
      • अन्यथा जब arr[i]> arr[i - 1] और arr[i]> arr[i + 1], तब arr[i] - 1 को टेम्परेचर में डालें, और फ्लैग सेट करें:=true
      • अन्यथा गिरफ्तारी [i] अस्थायी में डालें
    • गिरफ्तारी का अंतिम तत्व अस्थायी में डालें
    • गिरफ्तारी:=अस्थायी
  • रिटर्न अरेस्ट

उदाहरण(C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include <bits/stdc++.h>
using namespace std;
#define push push_back
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> transformArray(vector<int>& arr) {
      if(arr.size()<=2)return arr;
      bool flag = true;
      while(flag){
         flag = false;
         vector <int> temp;
         temp.push_back(arr[0]);
         for(int i = 1; i < arr.size()-1; i++){
            if(arr[i]< arr[i-1] && arr[i]<arr[i+1]){
               temp.push(arr[i]+1);
               flag = true;
            }
            else if(arr[i]> arr[i-1] && arr[i]>arr[i+1]){
               flag = true;
               temp.push(arr[i]-1);
            }
            else temp.push(arr[i]);
         }
         temp.push_back(arr[arr.size()-1]);
         arr = temp;
      }
      return arr;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,6,3,4,3,5};
   print_vector(ob.transformArray(v));
}

इनपुट

[1,6,3,4,3,5]

आउटपुट

[1,4,4,4,4,5]

  1. सी ++ में एक उत्पाद सरणी पहेली (ओ (1) स्पेस)?

    यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का गुणनफल धारण करेगी। और एक बाधा यह है कि हम इस समस्या में डिवीजन ऑपरेटर का उपयोग नहीं कर सकते हैं। हमें

  1. सी ++ स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की एक सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि सी में कोई तार नहीं था। हमें कैरेक्टर ऐरे का उपयोग करके स्ट्रिंग्स बनाना है। इसलिए स्ट्रिंग्स की कुछ सरणी बनाने के लिए, हमें वर्णों की एक 2-आयामी सरणी बनानी होगी। प्रत्येक पंक्तियाँ उस मैट्रिक्स

  1. सी++ में छँटाई

    इस खंड में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिथम कैसे किया जाता है। एक क्रमबद्ध सरणी एक सरणी है जिसमें प्रत्येक तत्व को किसी क्रम में क्रमबद्ध किया जाता है जैसे संख्यात्मक, वर्णानुक्रम आदि। संख्यात्मक सरणी को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे कि बबलसॉर्ट, इंसर्शन सॉर्ट, सेलेक्शन सॉर्ट, मर्ज