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

C++ में अधिकतम लगातार 1s II - एक 0 को फ्लिप करने की अनुमति


समस्या विवरण

मान लीजिए हमारे पास एक बाइनरी सरणी है; हमें इस सरणी में अधिकतम लगातार 1s की संख्या ढूंढनी है यदि हम अधिकतम एक 0 को फ्लिप कर सकते हैं।

उदाहरण के लिए, यदि इनपुट [1,0,1,1,0] है, तो आउटपुट 4 होगा क्योंकि यदि हम पहले 0 को फ्लिप करते हैं तो हमें अधिकतम लगातार 1s मिलते हैं। फ्लिप करने के बाद, अधिकतम लगातार 1s की संख्या 4 होगी।

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

इस समस्या को स्लाइडिंग विंडो तकनीक का उपयोग करके हल किया जा सकता है:

  1. दो पॉइंटर्स (i और j) का उपयोग करके एक विंडो बनाएं
  2. विंडो में अधिकतम एक 0 होने दें
  3. जब विंडो में एक से अधिक 0 हो जाएं, तो बाएं पॉइंटर (j) को दाएं बढ़ाएं
  4. प्रत्येक चरण पर अधिकतम विंडो आकार को ट्रैक करें

एल्गोरिदम चरण

  • ret := 1, n := nums का आकार
  • यदि n शून्य है, तो 0 लौटाएं
  • j := 0, zero := 0
  • i को 0 से n-1 तक लूप करें:
    • यदि nums[i] == 0, तो zero बढ़ाएं
    • जब (j <= i और zero > 1) हो:
      • यदि nums[j] == 0, तो zero घटाएं
      • j बढ़ाएं
    • ret = max(ret, i - j + 1) अपडेट करें
  • ret लौटाएं

C++ कार्यान्वयन

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

class Solution { 
public: 
    int findMaxConsecutiveOnes(vector<int>& nums) { 
        int ret = 1; 
        int n = nums.size(); 
        if (!n) 
            return 0; 
        int j = 0; 
        int zero = 0; 
        for (int i = 0; i < n; i++) { 
            if (nums[i] == 0) { 
                zero++; 
            } 
            while (j <= i && zero > 1) { 
                if (nums[j] == 0) { 
                    zero--; 
                } 
                j++; 
            } 
            ret = max(ret, i - j + 1); 
        } 
        return ret; 
    } 
}; 

int main(){ 
    Solution ob; 
    vector<int> v = {1,0,1,1,1,0,1,1}; 
    cout << (ob.findMaxConsecutiveOnes(v)); 
    return 0;
}

इनपुट

{1,0,1,1,1,0,1,1}

आउटपुट

6
  1. C++ में एक रेखा पर अधिकतम बिंदु C++ में एक रेखा पर अधिकतम बिंदु

    मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -तो 4 बिंदु हैंइसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएंans := 2i को 1 से n - 1 तक की रेंज मेंcount := 0इं

  1. - C++ में इंलाइन फ़ंक्शन्स

    C++ इंलाइन फ़ंक्शन एक शक्तिशाली अवधारणा है जिसे आमतौर पर क्लासेस के साथ उपयोग किया जाता है। यदि कोई फ़ंक्शन इंलाइन है, तो कंपाइलर उस फ़ंक्शन के कोड की एक कॉपी प्रत्येक बिंदु पर रखता है जहां कंपाइल समय पर फ़ंक्शन को कॉल किया जाता है। इंलाइन फ़ंक्शन में कोई भी परिवर्तन फ़ंक्शन के सभी क्लाइंट्स को पुन

  1. - C++ प्रोग्राम: मैक्स हीप इम्प्लीमेंटेशन

    एक बाइनरी हीप एक पूर्ण बाइनरी ट्री है जो या तो मिन हीप या मैक्स हीप होता है। एक मैक्स बाइनरी हीप में, रूट पर की हीप में मौजूद सभी कीज़ में अधिकतम होनी चाहिए। यह गुण बाइनरी ट्री में सभी नोड्स के लिए रिकर्सिवली सत्य होना चाहिए। मिन बाइनरी हीप मिन हीप के समान है। एल्गोरिदम max_heap के लिए: शुरुआत