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

C++ में बिट सरणी का उपयोग करके सरणी में डुप्लिकेट खोजें


अवधारणा

हमारे पास n संख्याओं की एक सरणी है, जहां n अधिकतम 32,000 है। अब दी गई सरणी में डुप्लिकेट प्रविष्टियां हो सकती हैं और हम नहीं जानते कि n क्या है। अब सवाल उठता है कि केवल 4 किलोबाइट्स मेमोरी उपलब्ध होने पर, सरणी में सभी डुप्लिकेट तत्वों को कैसे प्रदर्शित या प्रिंट करेंगे?

इनपुट

arr[] = {2, 6, 2, 11, 13, 11}

आउटपुट

2 11 2 और 11 दी गई सरणी में एक से अधिक बार दिखाई देते हैं।

इनपुट

arr[] = {60, 50, 60}

आउटपुट

60

विधियां

अब हमारे पास 4 किलोबाइट्स मेमोरी है जो इंगित करता है कि हम 8 * 4 * 2^10 बिट्स तक एड्रेस कर सकते हैं। यह ध्यान दिया जाना चाहिए कि 32 * 2^10 बिट्स 32000 से बड़ा है। तो हम 32000 बिट्स का एक बिट वेक्टर बना सकते हैं, जहां प्रत्येक बिट एक पूर्णांक को दर्शाता है।

फिर यह ध्यान दिया जाना चाहिए कि यदि हमें 32000 से अधिक बिट्स का बिट वेक्टर बनाने की आवश्यकता है तो हम इसे आसानी से 32000 से अधिक बना सकते हैं; इस बिट वेक्टर को लागू करके, हम सरणी के माध्यम से पुनरावृति करने में सक्षम हो सकते हैं, प्रत्येक तत्व v को बिट v को 1 पर सेट करके फ्लैग कर सकते हैं। इस मामले में, जब हम एक डुप्लिकेट तत्व पार करते हैं, तो हम इसे प्रिंट करते हैं।

उदाहरण

<प्रि क्लास="प्रिटीप्रिंट नोट्रांसलेट">// C++ program to print all Duplicates in array #include <bits/stdc++.h> using namespace std; // पूर्णांकों की सरणी का उपयोग करके बिट्स की सरणी को दर्शाने वाला क्लास class BitArray{    int *arr1;    public:    BitArray() {}    // कंस्ट्रक्टर    BitArray(int n1){       // 32 से विभाजित करने के लिए उपयोग किया जाता है। n बिट्स संग्रहीत करने के लिए, हमें       // n/32 + 1 पूर्णांक चाहिए (यह मानते हुए कि int       // 32 बिट्स का उपयोग करके संग्रहीत होता है)       arr1 = new int[(n1 >> 5) + 1];    }    // दी गई स्थिति पर बिट का मान प्राप्त करें    bool get(int pos1){       // पूर्णांक की स्थिति खोजने के लिए 32 से विभाजित करें।       int index1 = (pos1 >> 5);       // अब arr[index] में बिट संख्या निर्धारित करें       int bitNo1 = (pos1 & 0x1F);       // arr1[index1] में दिए गए बिट संख्या का मान निर्धारित करें       return (arr1[index1] & (1 << bitNo1)) != 0;    }    // दी गई स्थिति पर बिट सेट करने के लिए उपयोग किया जाता है    void set(int pos1){       बिट स्थिति का इंडेक्स निर्धारित करें       int index1 = (pos1 >> 5);       // arr1[index1] में बिट संख्या सेट करने के लिए उपयोग किया जाता है       int bitNo1 = (pos1 & 0x1F);       arr1[index1] |= (1 << bitNo1);    }    // सभी डुप्लिकेट प्रिंट करने के लिए मुख्य फ़ंक्शन दिखाता है    void checkDuplicates1(int arr1[], int n1){       // 32000 बिट्स का बिट वेक्टर बनाने के लिए उपयोग किया जाता है       BitArray ba1 = BitArray(320000);       // सरणी तत्वों को पार करने के लिए उपयोग किया जाता है       for (int i = 0; i < n1; i++){          // बिट सरणी में इंडेक्स          int num1 = arr1[i];          // अब यदि num पहले से ही बिट सरणी में मौजूद है          if (ba1.get(num1))             cout << num1 << " ";          // अन्यथा या फिर num डालें          else             ba1.set(num1);       }    } }; // ड्राइवर कोड int main(){    int arr1[] = {2, 6, 2, 11, 13, 11};    int n1 = sizeof(arr1) / sizeof(arr1[0]);    BitArray obj1 = BitArray();    obj1.checkDuplicates1(arr1, n1);    return 0; }

आउटपुट

2 11

  1. - C++ में डुप्लिकेट तत्वों वाली सरणी में फिक्स्ड पॉइंट ढूंढें

    समस्या विवरण एक क्रमबद्ध सरणी में फिक्स्ड पॉइंट वह तत्व है जिसका मान उसके सूचकांक के बराबर होता है। सरणी में नकारात्मक संख्याएं और डुप्लिकेट तत्व हो सकते हैं। यदि फिक्स्ड पॉइंट मौजूद है तो उसका मान वापस करें, अन्यथा -1 वापस करें। हल दृष्टिकोण बाइनरी खोज का उपयोग करके O(log n) समय में हल करें। डुप्

  1. - C++ STL का उपयोग करके ऐरे का गुणनफल

    यह ऐरे गुणनफल ज्ञात करने के लिए C++ प्रोग्राम का एक उदाहरण है। एल्गोरिदम Begin ऐरे के मान इनिशियलाइज़ करें। ऐरे का गुणनफल लौटाने के लिए उपयोगकर्ता परिभाषित फंक्शन accumulate को कॉल करें। समाधान प्रिंट करें। End. उदाहरण कोड #include <iostream> #include <numeric> using names

  1. - Python में बिट सरणी का उपयोग करके सरणी के डुप्लिकेट ढूंढना

    मान लीजिए हमारे पास n अलग-अलग संख्याओं की एक सरणी है; n अधिकतम 32,000 हो सकता है। सरणी में डुप्लिकेट प्रविष्टियां हो सकती हैं और हमें नहीं पता कि n का मान क्या है। अब यदि हमारे पास केवल 4-किलोबाइट मेमोरी है, तो हम सरणी में सभी डुप्लिकेट कैसे प्रदर्शित करेंगे? तो, यदि इनपुट [2, 6, 2, 11, 13, 11] की त