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

C++ में सभी बैनर लटकाने के लिए आवश्यक न्यूनतम पिन की संख्या ढूंढने का प्रोग्राम

समस्या विवरण

मान लीजिए हमारे पास [शुरुआत, अंत] फॉर्म के अंतरालों की एक सूची है जो हमारे द्वारा लटकाए जाने वाले बैनरों के प्रारंभ और अंत बिंदुओं को दर्शाती है। एक बैनर लटकाने के लिए कम से कम एक पिन की आवश्यकता होती है, और एक पिन एक से अधिक बैनर लटका सकता है। हमें सभी बैनर लटकाने के लिए आवश्यक पिन की न्यूनतम संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है intervals = [[2, 5], [5, 6], [8, 10], [10, 13]], तो आउटपुट 2 होगा, क्योंकि हम पोजीशन 5 और 10 पर दो पिन लगाकर सभी बैनर लटका सकते हैं।

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

इस समस्या को हल करने के लिए हम लालची एल्गोरिदम का उपयोग करेंगे:

  1. v ऐरे को अंतराल के अंत मानों के आधार पर सॉर्ट करें
  2. ret := 0
  3. last := -अनंत
  4. v में प्रत्येक आइटम it के लिए:
    • यदि last >= it की शुरुआत, तो अगले इटरेशन पर जाएं
    • ret बढ़ाएं
    • last := it का अंत
  5. ret वापस करें

उदाहरण

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

class Solution {
public:
    static bool cmp(vector<int>& a, vector<int>& b) {
        return a.back() < b.back();
    }
    
    int solve(vector<vector<int>>& v) {
        sort(v.begin(), v.end(), cmp);
        int ret = 0;
        int last = -1e8;
        for (auto& it : v) {
            if (last >= it[0]) {
                continue;
            }
            ret++;
            last = it[1];
        }
        return ret;
    }
};

int solve(vector<vector<int>>& intervals) {
    return (new Solution())->solve(intervals);
}

int main() {
    vector<vector<int>> v = {{2, 5}, {5, 6}, {8, 10}, {10, 13}};
    cout << solve(v);
}

इनपुट

{{2, 5}, {5, 6}, {8, 10}, {10, 13}}

आउटपुट

2
  1. C++ में प्रतिद्वंद्वी को पकड़ने के लिए आवश्यक न्यूनतम चरणों की संख्या ढूंढने का प्रोग्राम C++ में प्रतिद्वंद्वी को पकड़ने के लिए आवश्यक न्यूनतम चरणों की संख्या ढूंढने का प्रोग्राम

    परिचय मान लीजिए हमारे पास ट्री एजेज की एक सूची है [u, v] के रूप में, जो इंगित करती है कि u और v के बीच एक अनडायरेक्टेड एज है। और हमारे पास दो मान x और y भी हैं। यदि हम नोड x पर हैं, और हमारा प्रतिद्वंद्वी नोड y पर है। पहले राउंड में हम चलते हैं, फिर अगले राउंड में प्रतिद्वंद्वी चलता है और इसी तरह।

  1. - C++ प्रोग्राम ग्राफ को डिस्कनेक्ट करने के लिए काटने के लिए न्यूनतम एजेस की संख्या खोजने के लिए

    इस प्रोग्राम में हमें एक ग्राफ की एज कनेक्टिविटी ढूंढनी है। एक ग्राफ की एज कनेक्टिविटी का अर्थ है यह एक ब्रिज है, इसे हटाने पर ग्राफ डिस्कनेक्ट हो जाएगा। एक डिस्कनेक्टेड अनडायरेक्टेड ग्राफ में ब्रिज को हटाने पर कनेक्टेड कंपोनेंट्स की संख्या बढ़ जाती है। फंक्शन्स और सूडोकोड connections() एक रिकर्सि

  1. - C++ प्रोग्राम: ग्राफ में आर्टिकुलेशन पॉइंट्स की संख्या खोजें

    ग्राफ में आर्टिकुलेशन पॉइंट्स (या कट वर्टेक्स) एक पॉइंट है यदि इसे हटाने पर (और इसके माध्यम से एज) ग्राफ डिस्कनेक्ट हो जाता है। एक डिस्कनेक्टेड अनडायरेक्टेड ग्राफ के लिए एक आर्टिकुलेशन पॉइंट एक वर्टेक्स है जिसे हटाने पर कनेक्टेड कंपोनेंट्स की संख्या बढ़ जाती है। एल्गोरिदम Begin    हम यहां