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

C++ का उपयोग करके अधिकतम 1 वाली पंक्ति खोजना

समस्या विवरण

इस समस्या में, हमें एक बाइनरी मैट्रिक्स दिया गया है जहां प्रत्येक पंक्ति के तत्व क्रमबद्ध हैं। हमारा कार्य अधिकतम 1 वाली पंक्ति खोजना है।

उदाहरण

इनपुट

mat[][] = {{0, 1, 1, 1},
           {1, 1, 1, 1},
           {0, 0, 0, 1},
           {0, 0, 1, 1}}

आउटपुट

1

व्याख्या

मैट्रिक्स की प्रत्येक पंक्ति में 1 की गिनती:
पंक्ति 0: 3
पंक्ति 1: 4
पंक्ति 2: 1
पंक्ति 3: 2

हल का दृष्टिकोण

समस्या का एक सरल समाधान पहली 1 के सबसे छोटे इंडेक्स वाली पंक्ति खोजना है।

एक दृष्टिकोण पंक्ति-वार पार करके पहली 1 का इंडेक्स खोजना है जो पंक्ति में अधिकतम 1 की गिनती लौटाएगा। और फिर हम अधिकतम 1 वाली पंक्ति वापस करेंगे।

एक अन्य दृष्टिकोण बाइनरी खोज का उपयोग करके प्रत्येक पंक्ति में पहली 1 की घटना खोजना है। फिर हम अधिकतम 1 वाले मान को वापस करेंगे।

C++ कार्यान्वयन (बाइनरी खोज)

#include <iostream> 
using namespace std; 

#define R 4 
#define C 4 

int findFirst1BinSearch(bool arr[], int low, int high) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if ((mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)
            return mid;
        else if (arr[mid] == 0)
            return findFirst1BinSearch(arr, (mid + 1), high);
        else
            return findFirst1BinSearch(arr, low, (mid - 1));
    }
    return -1;
}

int findMaxOneRow(bool mat[R][C]) {
    int max1RowIndex = 0, maxCount = -1;
    for (int i = 0; i < R; i++) {
        int first1Index = findFirst1BinSearch(mat[i], 0, C-1);
        if (first1Index != -1 && C - first1Index > maxCount) {
            maxCount = C - first1Index;
            max1RowIndex = i;
        }
    }
    return max1RowIndex;
}

int main() {
    bool mat[R][C] = {{0, 1, 1, 1},
                      {1, 1, 1, 1},
                      {0, 0, 1, 1},
                      {0, 0, 0, 1}};
    cout << "मैट्रिक्स में अधिकतम 1 वाली पंक्ति है " << findMaxOneRow(mat);
    return 0;
}

आउटपुट

मैट्रिक्स में अधिकतम 1 वाली पंक्ति है 1

जटिलता विश्लेषण

  • समय जटिलता: O(R log C) - R पंक्तियों के लिए बाइनरी खोज
  • स्पेस जटिलता: O(log C) - पुनरावर्ती स्टैक के कारण

अनुकूलन नोट

इसे O(R + C) में एक पॉइंटर का उपयोग करके हल किया जा सकता है जो शीर्ष-दाएं कोने से शुरू होता है और बाएं/नीचे जाता है, लेकिन बाइनरी खोज दृष्टिकोण समझने में आसान है और सामान्य सीमाओं के लिए पर्याप्त तेज़ है।

  1. C++ का उपयोग करके पेंटागोनल पिरामिडल संख्या ज्ञात करना C++ का उपयोग करके पेंटागोनल पिरामिडल संख्या ज्ञात करना

    एक पेंटागोनल पिरामिडल संख्या पेंटागोनल बेस पिरामिड में वस्तुओं की संख्या के बराबर होती है। नीचे कुछ पेंटागोनल संख्याएं देखें। N तक पेंटागोनल संख्याओं का योग Nवीं पेंटागोनल पिरामिडल संख्या के बराबर होता है। इस लेख में, हम Nवीं पेंटागोनल पिरामिडल संख्या खोजने पर चर्चा करेंगे, उदाहरण के लिए: इनपुट:

  1. C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना

    इस लेख में, आप एक दी गई स्ट्रिंग में बनने वाले सबस्ट्रिंग्स (गैर-खाली) की संख्या निकालने के दृष्टिकोण के बारे में जानेंगे।इनपुट: string = moon आउटपुट: 10 व्याख्या: सबस्ट्रिंग्स हैं m, o, o, n, mo, oo, on, moo, oon और moon। इनपुट: string = yellow आउटपुट: 21समाधान खोजने का दृष्टिकोणमान लें स्ट्रिंग की

  1. C++ का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात करें C++ का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात करें

    बिंदु X और Y के बीच n संख्या में इंटरमीडिएट ट्रेन स्टेशन हैं। उन विभिन्न तरीकों की गणना करें जिनसे ट्रेनों को s स्टेशनों पर रुकने के लिए व्यवस्थित किया जा सकता है जैसे कि कोई दो स्टेशन एक-दूसरे के बगल में न हों। तो इस लेख में, हम स्टॉपिंग स्टेशनों की संख्या ज्ञात करने के लिए हर संभव दृष्टिकोण की व्य