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

C++ में सॉर्टेड 0 और 1 की सरणी में ट्रांजिशन पॉइंट खोजें


केवल 0 और 1 वाली सॉर्टेड संख्याओं की एक सरणी दी गई है, ट्रांजिशन पॉइंट खोजें। एक ट्रांजिशन पॉइंट सरणी में पहली बार आने वाले '1' का इंडेक्स है। उदाहरण के लिए,

इनपुट-1 -

N = 6 arr[] = {0, 0, 0, 0, 1, 1}

आउटपुट -

4

व्याख्या - चूंकि दी गई सरणी में 0 और 1 हैं, हम देख सकते हैं कि इंडेक्स '4' पर तत्व संख्या '1' रखता है।

इनपुट-2 -

N = 5 arr[] = {0, 0, 1, 1, 1}

आउटपुट -

2

व्याख्या - दी गई सरणी में 0 और 1 हैं, हम देख सकते हैं कि इंडेक्स '2' पर तत्व संख्या '1' रखता है। इस प्रकार, हम 2 लौटाएंगे।

इस प्रॉब्लम को हल करने का दृष्टिकोण

दिए गए पूर्णांकों की सरणी में, हमें पहले 1 का इंडेक्स ढूंढना है। इस विशेष प्रॉब्लम को हल करने के लिए, हम बाइनरी सर्च मेथड का उपयोग करके पहले '1' का इंडेक्स ढूंढ सकते हैं।

  • N बाइनरी नंबर्स की एक सरणी का इनपुट लें

  • अब एक फंक्शन transitionPoint(int *arr, int n) एक सरणी को इनपुट के रूप में लेता है और उसका आकार और सरणी में पहली बार आने वाले '1' का इंडेक्स लौटाता है।

  • दो पॉइंटर्स लो, हाई लें जो '0' और '1' के रूप में इनिशियलाइज़ हों।

  • अब हम सरणी का मध्य बिंदु ढूंढेंगे और जांचेंगे कि क्या यह '1' है या नहीं।

  • यदि सरणी का मध्य '1' है तो हम उसका इंडेक्स लौटाएंगे अन्यथा हम आगे बढ़कर जांच करेंगे।

  • लो पॉइंटर को बढ़ाएं और फिर '1' के लिए जांच करें।

  • चरणों को तब तक दोहराएं जब तक हमें '1' न मिल जाए।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

int transitionPoint(int *arr, int n) {
    int low = 0;
    int high = n - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        if (arr[mid] == 0)
            low = mid + 1;
        else if (arr[mid] == 1) {
            if (mid == 0 || (mid > 0 && arr[mid - 1] == 0))
                return mid;
            high = mid - 1;
        }
    }
    return -1;
}

int main() {
    int n = 6;
    int arr[n] = {0, 0, 0, 1, 1, 1};
    int ans = transitionPoint(arr, n);
    if (ans >= 0) {
        cout << "Transition Point is: " << ans << endl;
    } else {
        cout << "Not Found" << endl;
    }
    return 0;
}

आउटपुट

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

Transition Point is: 3

दी गई सरणी {0, 0, 0, 1, 1, 1} में तत्व '1' इंडेक्स '3' पर मौजूद है, इस प्रकार हमें आउटपुट के रूप में '3' मिलता है।


  1. - C++ में जांचें कि दी गई सरणी युग्मवार सॉर्टेड है या नहीं

    हमारे पास n तत्वों की एक सरणी A है। हमें जांचना है कि सरणी युग्मवार सॉर्टेड (pairwise sorted) है या नहीं। मान लीजिए सरणी {8, 10, 18, 20, 5, 15} जैसी है। यह युग्मवार सॉर्टेड है क्योंकि (8, 10), (18, 20), (5, 15) सॉर्टेड हैं। यदि सरणी में विषम संख्या में तत्व हैं, तो अंतिम को नजरअंदाज कर दिया जाएगा।दृ

  1. - C++ में LCM और HCF दिए जाने पर दूसरी संख्या ढूंढना

    मान लीजिए हमारे पास एक संख्या A है, और LCM और GCD मान हैं, हमें दूसरी संख्या B ढूंढनी है। यदि A = 5, LCM 25 है, HCF = 4, तो दूसरी संख्या 4 होगी। हम जानते हैं कि -$$A * B = LCM * HCF$$$$B = \frac{LCM * HCF}{A}$$उदाहरण#include <iostream> using namespace std; int anotherNumber(int A, int LCM, int

  1. - C++ में दिए गए सरणी के एलिमेंट्स के फैक्टोरियल का GCD खोजें

    मान लीजिए हमारे पास N एलिमेंट्स वाली एक सरणी A है। हमें सरणी के सभी एलिमेंट्स के फैक्टोरियल का GCD निकालना है। मान लीजिए एलिमेंट्स {3, 4, 8, 6} हैं, तो फैक्टोरियल का GCD 6 होगा। यहां हम ट्रिक देखेंगे। चूंकि दो संख्याओं का GCD वह सबसे बड़ी संख्या है जो दोनों को विभाजित करती है, तो दो संख्याओं के फैक्