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

C++ में 0 और 1 की अनंत सॉर्टेड सरणी में पहले 1 का इंडेक्स ज्ञात करें


इस समस्या में, हमें एक अनंत सरणी bin[] दी गई है जिसमें बूलियन मान (केवल 0 और 1) सॉर्टेड क्रम में हैं। हमारा कार्य 0 और 1 की अनंत सॉर्टेड सरणी में पहले 1 का इंडेक्स ज्ञात करना है।

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

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

इनपुट : bin[] = {0, 0, 0, 1, 1, ....} आउटपुट : 3

व्याख्या −

बाइनरी सरणी में पहले 1 का सामना इंडेक्स 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<<"अनंत सरणी में 1 की पहली घटना का इंडेक्स है "<<find1stOneInfiniteArray(bin); return 0; }

आउटपुट

अनंत सरणी में 1 की पहली घटना का इंडेक्स है 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<<"अनंत सरणी में 1 की पहली घटना का इंडेक्स है " <<find1stOneInfiniteArray(bin,low, high); return 0; }

आउटपुट

अनंत सरणी में 1 की पहली घटना का इंडेक्स है 3

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

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

  1. - C++ में रोटेटेड सॉर्टेड सरणी में रोटेशन काउंट ढूंढना

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

  1. - C++ प्रोग्राम: संख्याओं के एरे के गुणनफल का पहला अंक ज्ञात करना

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