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

C++ में अटेंड किए जा सकने वाले इवेंट्स की अधिकतम संख्या


मान लीजिए हमारे पास इवेंट्स का एक ऐरे है जहां events[i] = [startDayi, endDayi]। यहां हर इवेंट i startDayi पर शुरू होता है और endDayi पर खत्म होता है। हम किसी इवेंट i को किसी भी दिन d पर अटेंड कर सकते हैं जहां d startTimei और endTimei की रेंज में है (दोनों इन्क्लूसिव)। हमें ध्यान रखना होगा कि हम किसी भी समय केवल एक इवेंट अटेंड कर सकते हैं। तो हम अटेंड कर सकने वाले इवेंट्स की अधिकतम संख्या ढूंढें। उदाहरण के लिए, अगर इनपुट [[1,4], [4,4], [2,2], [3,4], [1,1]] है, तो आउटपुट 4 होगा, क्योंकि हम अधिकतम चार इवेंट्स अटेंड कर सकते हैं, ये हैं [1, 1], [2, 2], [3, 4] और [4, 4]।

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • n := इवेंट्स की संख्या, फिर इवेंट लिस्ट को स्टार्ट डेट के आधार पर सॉर्ट करें, ret := 0 और itr := 0 सेट करें

  • मिन-हीप बेस्ड प्रायोरिटी क्यू pq बनाएं

  • i को 1 से 100000 तक लूप करें:

    • जब तक itr < n और events[itr][0] = i:

      • events[itr][1] इंसर्ट करें

      • itr को 1 से बढ़ाएं

    • जब तक pq खाली नहीं है और pq का टॉप < i:

      • pq से एलिमेंट डिलीट करें

    • अगर pq खाली नहीं है, तो pq से डिलीट करें और ret को 1 से बढ़ाएं

  • ret लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:

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

class Solution {
public:
    static bool cmp(vector <int>& a, vector <int>& b){
        return a[0] < b[0];
    }
    int maxEvents(vector<vector<int>>& events) {
        int n = events.size();
        sort(events.begin(), events.end(), cmp);
        int ret = 0;
        int itr = 0;
        priority_queue <int, vector <int>, greater <int>> pq;
        for(int i = 1; i <= 1e5; i++){
            while(itr < n && events[itr][0] == i){
                pq.push(events[itr][1]);
                itr++;
            }
            while(!pq.empty() && pq.top() < i) pq.pop();
            if(!pq.empty()){
                pq.pop();
                ret++;
            }
        }
        return ret;
    }
};

int main(){
    vector<vector<int>> v = {{1,4},{4,4},{2,2},{3,4},{1,1}};
    Solution ob;
    cout << (ob.maxEvents(v));
}

इनपुट

[[1,4],[4,4],[2,2],[3,4],[1,1]]

आउटपुट

4

  1. C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित अधिकतम संख्या C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित अधिकतम संख्या

    दिया गया कार्य N सेगमेंट का उपयोग करके किसी भी संख्या के सेवन सेगमेंट डिस्प्ले पर प्रदर्शित की जा सकने वाली अधिकतम संख्या ढूंढना है।उदाहरण से समझते हैंइनपुट - N=5आउटपुट - 71व्याख्या - सबसे बड़ी संख्या सेवन सेगमेंट डिस्प्ले पर इस प्रकार प्रदर्शित होगी।इनपुट - N=6आउटपुट - 111प्रयुक्त दृष्टिकोणनिम्नलिख

  1. - C++ में k अपडेट के साथ बराबर किए जा सकने वाले अधिकतम तत्व

    दिया गया कार्य एक दी गई सरणी में अधिकतम तत्वों की संख्या ढूंढना है जिन्हें अधिकतम k बार इसके तत्वों को बढ़ाकर बराबर बनाया जा सकता है। उदाहरण इनपुट a[] = {1, 3, 8}, k = 4 आउटपुट 2 व्याख्या यहां हम दो चार प्राप्त कर सकते हैं 1 को तीन बार बढ़ाकर और 3 को एक बार बढ़ाकर, जो a[] = {4, 4, 8} बनाता है।

  1. C++ में समकोण समद्विबाहु त्रिभुज में फिट होने वाले वर्गों की अधिकतम संख्या C++ में समकोण समद्विबाहु त्रिभुज में फिट होने वाले वर्गों की अधिकतम संख्या

    दिया गया कार्य भुजा a वाले वर्गों की अधिकतम संख्या ढूंढना है जो आधार s वाले दिए गए समकोण समद्विबाहु त्रिभुज (An isosceles triangle has at least 2 equal sides) के अंदर फिट हो सकते हैं। उदाहरण इनपुट s=5, a=1 आउटपुट 10 व्याख्या - आधार में वर्गों की संख्या की गणना s को a से विभाजित करके और 1 घटाकर क