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

C++ में 0s और 1s की अनंत क्रमबद्ध सरणी में पहले 1 की अनुक्रमणिका खोजें

इस समस्या में, हमें एक अनंत सरणी बिन [] दिया जाता है जिसमें क्रमबद्ध क्रम में बूलियन मान (केवल 0 और 1) होते हैं। हमारा काम है 0 और 1 के अनंत क्रमबद्ध सरणी में पहले 1 की अनुक्रमणिका ढूंढना

यहां, हमारे पास एक अनंत सरणी है जो गारंटी देता है कि सरणी में 1 मौजूद है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input : bin[] = {0, 0, 0, 1, 1, ....}
Output : 3

स्पष्टीकरण -

First 1 of the binary array is encountered at index 3.

समाधान दृष्टिकोण

समस्या को हल करने के लिए, हमें मूल रूप से सरणी में पहली 1 की अनुक्रमणिका खोजने की आवश्यकता है। उसके लिए हम एक खोज तकनीक का उपयोग कर सकते हैं।

एक दृष्टिकोण रैखिक खोज का उपयोग कर सकता है, हम अनंत लूप का उपयोग करके सरणी को पार करेंगे। और सरणी में पहले 1 की अनुक्रमणिका लौटाएं, अन्यथा -1 प्रिंट करें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
double find1stOneInfiniteArray(int bin[]) {
   int i = 0;
   while(1){
      if (bin[i] == 1)
         return i;
      i++;
   }
   return -1;
}
int main() {
   int bin[] = { 0, 0, 0, 1, 1, 1 };
   cout<<"The index of 1st occurrence of 1 in infinite array is "<<find1stOneInfiniteArray(bin);
   return 0;
}

आउटपुट

The index of 1st occurrence of 1 in infinite array is 3

एक और खोज तकनीक इसका उपयोग बाइनरी सर्च के रूप में किया जा सकता है क्योंकि सरणी को सॉर्ट किया जाता है।

बस हमें एल्गोरिथम को अपडेट करने की आवश्यकता है क्योंकि कोई ऊपरी सीमा नहीं है, हम इसे इंडेक्स वैल्यू 1 से पहले 1 की घटना के इंडेक्स तक उच्च के मूल्य को दोगुना करके पाएंगे।

इन सीमाओं का उपयोग करके, हम बाइनरी खोज का उपयोग करके अनुक्रमणिका ढूंढ सकते हैं।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
double find1stOneInfiniteArray(int bin[], int low, int high) {
   int mid;
   while (low <= high) {
      mid = (low + high) / 2;
      if (bin[mid] == 1 && (mid == 0 || bin[mid - 1] == 0))
         return mid;
      else if (bin[mid] == 1)
         high = mid - 1;
      else
         low = mid + 1;
   }
   return -1;
}
int main() {
   int bin[] = { 0, 0, 0, 1, 1, 1, 1 };
   int low = 0;
   int high = 1;
   while(bin[high] != 1){
      low = high;
      high *= 2;
   }
   cout<<"The index of 1st occurrence of 1 in infinite array is " <<find1stOneInfiniteArray(bin,low, high);
   return 0;
}

आउटपुट

The index of 1st occurrence of 1 in infinite array is 3

  1. C++ में किसी सरणी में पहला, दूसरा और तीसरा न्यूनतम तत्व खोजें

    मान लीजिए कि हमारे पास n तत्वों की एक सरणी है। हमें सरणी में पहले, दूसरे और तीसरे न्यूनतम तत्वों को खोजना होगा। पहला न्यूनतम न्यूनतम है, दूसरा न्यूनतम न्यूनतम है लेकिन पहले वाले से बड़ा है, और इसी तरह तीसरा मिनट न्यूनतम है लेकिन दूसरे मिनट से बड़ा है। प्रत्येक तत्व के माध्यम से स्कैन करें, फिर तत्व

  1. सी ++ में घुमाए गए क्रमबद्ध सरणी में घूर्णन गणना खोजें

    विचार करें कि हमारे पास एक सरणी है, जो क्रमबद्ध सरणी घुमाई गई है। हमें सरणी को सॉर्ट करने के लिए आवश्यक घुमावों की संख्या का पता लगाना होगा। (हम दाएं से बाएं घुमाने पर विचार करेंगे।) मान लीजिए कि सरणी इस प्रकार है:{15, 17, 1, 2, 6, 11}, तो हमें सरणी को क्रमबद्ध करने के लिए दो बार घुमाना होगा। अंतिम

  1. सी ++ प्रोग्राम संख्याओं की एक सरणी के उत्पाद में पहला अंक खोजने के लिए

    इस लेख में, हम दिए गए सरणी के तत्वों के उत्पाद में पहला अंक खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे। उदाहरण के लिए, मान लें कि हमें एक सरणी दी गई है। arr = {12, 5, 16} तब इन तत्वों का गुणनफल 12*5*16 =960 होगा। इसलिए, परिणाम यानी इस मामले में उत्पाद का पहला अंक 9 होगा। उदाहरण #include <bits/st