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

C++ में O(1) अतिरिक्त स्थान के साथ सरणी को वैकल्पिक धनात्मक और ऋणात्मक आइटम में पुनर्व्यवस्थित करें


हमें एक पूर्णांक प्रकार की सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों संख्याएँ हैं, मान लीजिए, arr[] किसी भी दिए गए आकार की। कार्य है सरणी को इस तरह पुनर्व्यवस्थित करना कि एक धनात्मक संख्या होगी जो ऋणात्मक संख्याओं से घिरी होगी। यदि अधिक धनात्मक और ऋणात्मक संख्याएँ हैं, तो उन्हें सरणी के अंत में व्यवस्थित किया जाएगा।

विभिन्न इनपुट-आउटपुट परिदृश्य

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

आउटपुट - पुनर्व्यवस्थापन से पहले सरणी: -1 -2 -3 1 2 3 O(1) अतिरिक्त स्थान के साथ वैकल्पिक धनात्मक और ऋणात्मक आइटम में सरणी का पुनर्व्यवस्थापन है: -1 1 -2 2 -3 3

व्याख्या - हमें आकार 6 की एक पूर्णांक सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों तत्व हैं। अब, हम सरणी को इस तरह पुनर्व्यवस्थित करेंगे कि सभी धनात्मक तत्व ऋणात्मक तत्वों से घिरे हों और सभी अतिरिक्त तत्व सरणी के अंत में जोड़े जाएंगे यानी -1 1 -2 2 -3 3 अंतिम परिणाम होगा।

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

आउटपुट - पुनर्व्यवस्थापन से पहले सरणी: -1 -2 -3 1 2 3 5 5 -5 3 1 1 O(1) अतिरिक्त स्थान के साथ वैकल्पिक धनात्मक और ऋणात्मक आइटम में सरणी का पुनर्व्यवस्थापन है: -1 1 -2 2 -3 3 -5 5 5 3 1 1

व्याख्या - हमें आकार 12 की एक पूर्णांक सरणी दी गई है जिसमें धनात्मक और ऋणात्मक दोनों तत्व हैं। अब, हम सरणी को इस तरह पुनर्व्यवस्थित करेंगे कि सभी धनात्मक तत्व ऋणात्मक तत्वों से घिरे हों और सभी अतिरिक्त तत्व सरणी के अंत में जोड़े जाएंगे यानी -1 1 -2 2 -3 3 -5 5 5 3 1 1 अंतिम परिणाम होगा।

उपयोग किया गया दृष्टिकोण

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

  • FOR लूप का उपयोग करके पुनर्व्यवस्थापन क्रिया करने से पहले सरणी प्रिंट करें।

  • सरणी और सरणी के आकार को पैरामीटर के रूप में पास करके फ़ंक्शन Rearrangement(arr, size) को कॉल करें।

  • फ़ंक्शन Rearrangement(arr, size) के अंदर

    • 'ptr' नामक एक पूर्णांक चर घोषित करें और इसे -1 से आरंभ करें।

    • i को 0 से size से कम होने तक FOR लूप शुरू करें। लूप के अंदर, जांचें यदि ptr 0 से बड़ा है तो जांचें यदि arr[i] 0 से बड़ा है AND arr[ptr] 0 से कम है OR arr[i] 0 से कम है AND arr[ptr] 0 से बड़ा है तो फ़ंक्शन move_array(arr, size, ptr, i) को कॉल करें और जांचें यदि i - ptr 2 से बड़ा है तो ptr को ptr + 2 सेट करें। अन्यथा, ptr को -1 सेट करें।

    • जांचें यदि ptr -1 है तो जांचें arr[i] 0 से बड़ा है AND !(i & 0x01) OR (arr[i] 0 से कम है) AND (i & 0x01) तो ptr को i सेट करें।

  • फ़ंक्शन move_array(int arr[], int size, int ptr, int temp) के अंदर

    • 'ch' नामक एक चर घोषित करें कैरेक्टर प्रकार का और इसे arr[temp] से सेट करें।

    • i को temp से ptr से बड़ा होने तक FOR लूप शुरू करें। लूप के अंदर, arr[i] को arr[i - 1] सेट करें।

    • arr[ptr] को ch सेट करें।

उदाहरण

#include <iostream> #include <assert.h> using namespace std; void move_array(int arr[], int size, int ptr, int temp){    char ch = arr[temp];    for(int i = temp; i > ptr; i--){       arr[i] = arr[i - 1];    }    arr[ptr] = ch; } void Rearrangement(int arr[], int size){    int ptr = -1;    for(int i = 0; i < size; i++){       if (ptr >= 0){          if(((arr[i] >= 0) && (arr[ptr] < 0)) || ((arr[i] < 0) && (arr[ptr] >= 0))){             move_array(arr, size, ptr, i);             if(i - ptr >= 2){                ptr = ptr + 2;             }             else{                ptr = -1;             }          }       }       if(ptr == -1){          if (((arr[i] >= 0) && (!(i & 0x01))) || ((arr[i] < 0) && (i & 0x01))){             ptr = i;          }       }    } } int main(){    //सरणी इनपुट करें    int arr[] = {-1, -2, -3, 1, 2, 3};    int size = sizeof(arr) / sizeof(arr[0]);    //मूल सरणी प्रिंट करें    cout<<"Array before Arrangement: ";    for (int i = 0; i < size; i++){       cout << arr[i] << " ";    }    //सरणी को पुनर्व्यवस्थित करने के लिए फ़ंक्शन कॉल करें    Rearrangement(arr, size);    //मानों को पुनर्व्यवस्थित करने के बाद सरणी प्रिंट करें    cout<<"\nRearrangement of an array in alternating positive & negative items with O(1) extra space is: ";    for(int i = 0; i < size; i++){       cout<< arr[i] << " ";    }    return 0; }

आउटपुट

उपरोक्त कोड चलाने पर निम्नलिखीय आउटपुट उत्पन्न होगा:

Array before Arrangement: -1 -2 -3 1 2 3 Rearrangement of an array in alternating positive & negative items with O(1) extra space is: -1 1 -2 2 -3 3

  1. - C++ STL में array::data() फंक्शन

    array::data() C++ STL में array::data() फंक्शन सरणी के पहले तत्व को इंगित करने वाला पॉइंटर लौटाता है। सिंटैक्स array_name.data(); पैरामीटर कोई पैरामीटर नहीं। रिटर्न प्रकार पहले तत्व का पॉइंटर। उदाहरण 1: पहला तत्व एक्सेस करें #include <bits/stdc++.h> using namespace std; int main() {

  1. - C++ में अभाज्य आवृत्ति वाले एरे तत्व

    एरे (Array) समान डेटा प्रकार के तत्वों का एक कंटेनर है। अभाज्य आवृत्ति (Prime Frequencies) का अर्थ है कि एरे के तत्व की घटनाओं की संख्या एक अभाज्य संख्या है। इसलिए, इन परिभाषाओं के आधार पर समस्या अभाज्य आवृत्ति वाले एरे तत्वों को खोजने की है। हमें एक स्ट्रिंग/एरे दिया गया है। हमें वर्णों की आवृत्ति

  1. - C++ में प्रोडक्ट ऐरे पजल (O(1) स्पेस)

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