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

एक सरणी को पुनर्व्यवस्थित करें ताकि एआर [i] एआर बन जाए [गिरफ्तारी [i]] सी ++ का उपयोग कर ओ (1) अतिरिक्त स्थान के साथ

हमें एक धनात्मक पूर्णांक प्रकार सरणी दी गई है, मान लीजिए, किसी भी आकार का arr[] ऐसा है कि किसी सरणी में तत्वों का मान 0 से अधिक होना चाहिए लेकिन किसी सरणी के आकार से कम होना चाहिए। कार्य सरणी को इस तरह से पुनर्व्यवस्थित करना है कि arr[i] arr[arr[i]] केवल दिए गए O(1) स्पेस के भीतर बन जाता है और अंतिम परिणाम प्रिंट करता है।

आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -

इनपुट - int arr[] ={0 3 2 1 5 4}

आउटपुट - व्यवस्था से पहले सरणी:0 3 2 1 5 4एक सरणी की पुनर्व्यवस्था ताकि arr[i] arr[arr[i]] हो जाए O(1) अतिरिक्त स्थान के साथ है:0 1 2 3 4 5

स्पष्टीकरण - हमें आकार 6 का एक पूर्णांक सरणी और 6 से कम मान वाले सभी तत्वों को दिया गया है। अब, हम सरणी को पुनर्व्यवस्थित करेंगे यानी arr[arr[0] is 0, arr[arr[1]] 1 है, arr [गिरफ्तारी [2]] 2 है, गिरफ्तारी [गिरफ्तारी [3]] 3 है, गिरफ्तारी [गिरफ्तारी [4]] 4 है और गिरफ्तारी [गिरफ्तारी [5]] 5 है। तो, पुनर्व्यवस्था के बाद अंतिम सरणी 0 1 2 है 3 4 5.

इनपुट - int arr[] ={1, 0}

आउटपुट - व्यवस्था से पहले सरणी:1 0एक सरणी की पुनर्व्यवस्था ताकि arr[i] arr बन जाए[arr[i]] O(1) अतिरिक्त स्थान के साथ है:0 1

स्पष्टीकरण - हमें आकार 2 का एक पूर्णांक सरणी और 2 से कम मान वाले सभी तत्वों को दिया गया है। अब, हम सरणी को पुनर्व्यवस्थित करेंगे यानी arr[arr[0] 1 है और arr[arr[1]] 0 है। तो , पुनर्व्यवस्था के बाद अंतिम सरणी 0 1 है।

इनपुट - int arr[] ={1, 0, 2, 3}

आउटपुट - व्यवस्था से पहले सरणी:1 0 2 3एक सरणी की पुनर्व्यवस्था ताकि arr[i] arr[arr[i]] हो जाए जिसमें O(1) अतिरिक्त स्थान हो:0 1 2 3

स्पष्टीकरण - हमें आकार 4 का एक पूर्णांक सरणी और 4 से कम मान वाले सभी तत्वों को दिया गया है। अब, हम सरणी को पुनर्व्यवस्थित करेंगे यानी arr[arr[0] is 0, arr[arr[1]] 1 है, arr [arr[2]] 2 है और arr[arr[3]] 3 है। तो, पुनर्व्यवस्था के बाद अंतिम सरणी 0 1 2 3 है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • पूर्णांक प्रकार के तत्वों की एक सरणी इनपुट करें और एक सरणी के आकार की गणना करें

  • व्यवस्था से पहले सरणी को प्रिंट करें और फ़ंक्शन को कॉल करें पुनर्व्यवस्था (गिरफ्तारी, आकार)

  • समारोह के अंदर पुनर्व्यवस्था (गिरफ्तारी, आकार)

    • I से 0 तक के लिए लूप प्रारंभ करें जब तक कि i आकार से कम न हो। लूप के अंदर, temp को arr[arr[i]] % size और arr[i] +=temp * size के रूप में सेट करें।

    • I से 0 तक के लिए लूप प्रारंभ करें जब तक कि i आकार से कम न हो। लूप के अंदर, arr[i] =arr[i] / size

      . सेट करें
  • परिणाम प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   for(int i=0; i < size; i++){
      int temp = arr[arr[i]] % size;
      arr[i] += temp * size;
   }
   for(int i = 0; i < size; i++){
      arr[i] = arr[i] / size;
   }
}
int main(){
   //input an array
   int arr[] = {0, 3, 2, 1, 5, 4};
   int size = sizeof(arr) / sizeof(arr[0]);
   //print the original Array
   cout<<"Array before Arrangement: ";
   for (int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा

Array before Arrangement: 0 3 2 1 5 4
Rearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: 0 1 2 3 4 5

  1. O(n) में एक सरणी में डुप्लिकेट खोजें और C++ में O(1) अतिरिक्त स्थान का उपयोग करें

    मान लीजिए कि हमारे पास 0 से n-1 तक की संख्याओं की एक सूची है। एक संख्या को जितनी बार संभव हो उतनी बार दोहराया जा सकता है। हमें बिना किसी अतिरिक्त स्थान के दोहराई जाने वाली संख्याएँ ज्ञात करनी हैं। यदि n =7, और सूची का मान [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] जैसा है। उत्तर 5, 2, 3 होगा। इसे हल करने के लि

  1. C++ में O(1) स्पेस में 0 से N-1 के तत्वों के साथ निरंतर सरणी में डुप्लिकेट खोजें

    मान लीजिए हमारे पास 0 से n-1 तक की संख्याओं की एक सूची है। एक संख्या को जितनी बार संभव हो उतनी बार दोहराया जा सकता है। हमें बिना किसी अतिरिक्त स्थान के दोहराई जाने वाली संख्याएँ ज्ञात करनी हैं। यदि n =7, और सूची का मान [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] जैसा है। उत्तर 5, 2, 3 होगा। इसे हल करने के लिए,

  1. सी++ में इंटीजर की सरणी में अधिकतम उत्पाद के साथ एक जोड़ी खोजें

    विचार करें कि हमारे पास एक सरणी A है, n विभिन्न तत्व हैं। हमें सरणी A से एक युग्म (x, y) ज्ञात करना है, ताकि x और y का गुणनफल अधिकतम हो। सरणी में सकारात्मक या नकारात्मक तत्व हो सकते हैं। मान लीजिए कि एक सरणी इस प्रकार है:ए =[-1, -4, -3, 0, 2, -5], तो जोड़ी (-4, -5) होगी क्योंकि उत्पाद अधिकतम है। इस