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

C++ में जांचें कि क्या सूची को k बढ़ते तत्वों के उपसूचियों में विभाजित किया जा सकता है


हमें एक संख्या सूची nums और एक पूर्णांक k दिया गया है। जांचना है कि क्या सूची को ऐसी उपसूचियों में विभाजित किया जा सकता है जहां प्रत्येक उपसूची में ठीक k तत्व हों और वे लगातार बढ़ते क्रम में हों।

उदाहरण: nums = [4, 3, 2, 4, 5, 6], k = 3 → आउटपुट true, क्योंकि हम [2, 3, 4] और [4, 5, 6] बना सकते हैं।

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

हम एक मैप (आवृत्ति गणना) और लालची दृष्टिकोण का उपयोग करते हैं:

  1. सभी तत्वों की आवृत्ति गिनें।
  2. जब तक मैप खाली नहीं है:
    • सबसे छोटा तत्व ढूंढें जिसका पूर्ववर्ती (element-1) मैप में न हो।
    • जांचें कि क्या element से element + k - 1 तक सभी तत्व मौजूद हैं।
    • यदि हां, तो उन सभी की आवृत्ति घटाएं और शून्य होने पर हटा दें।
    • यदि नहीं, तो असंभव है।
  3. यदि मैप खाली हो जाए तो true, अन्यथा false।

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

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

class Solution {
public:
    bool solve(vector nums, int k) {
        map m;
        for (auto& it : nums) m[it]++;
        bool ok = true;
        while (m.size() && ok) {
            ok = false;
            for (auto& it : m) {
                if (!m.count(it.first - 1)) {
                    bool flag = true;
                    for (int i = it.first; i <= it.first + k - 1; i++) {
                        if (!m.count(i)) flag = false;
                    }
                    if (flag) {
                        for (int i = it.first; i <= it.first + k - 1; i++) {
                            m[i]--;
                            if (m[i] == 0) m.erase(i);
                        }
                        ok = true;
                        break;
                    }
                }
            }
        }
        return m.empty();
    }
};

int main() {
    vector v = {4, 3, 2, 4, 5, 6};
    Solution ob;
    cout << ob.solve(v, 3);
    return 0;
}

इनपुट

{4, 3, 2, 4, 5, 6}

आउटपुट

1
  1. - पायथन में चेक करें कि क्या लिस्ट को लगातार बढ़ती सबलिस्ट में विभाजित किया जा सकता है

    मान लीजिए हमारे पास nums नामक संख्याओं की एक लिस्ट है जो नॉन-डिक्रीजिंग क्रम में सॉर्ट है, हमें चेक करना है कि क्या इसे किसी भी संख्या में सबसीक्वेंस में विभाजित किया जा सकता है जैसे कि प्रत्येक सबसीक्वेंस की न्यूनतम लंबाई 3 हो और वह लगातार बढ़ती हो।उदाहरण के लिए, यदि इनपुट nums = [2, 3, 4, 4, 5, 6,

  1. - सूची को उन जोड़ों में विभाजित किया जा सकता है या नहीं जांचने का पायथन प्रोग्राम जहां योग k का गुणक हो

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक मान k है, हमें जांचना है कि क्या सूची को जोड़ों में विभाजित किया जा सकता है जैसे कि प्रत्येक जोड़ी का योग k से विभाज्य हो। उदाहरण के लिए, यदि इनपुट nums = [4, 7, 2, 5] k = 6 है, तो आउटपुट True होगा, क्योंकि हम दी गई सूची को (4, 2) और (8, 1) जै

  1. - पायथन में जांचें कि सूची सख्ती से बढ़ रही है या सख्ती से घट रही है

    मान लीजिए हमारे पास संख्याओं की एक सूची है; हमें जांचना है कि क्या सूची सख्ती से बढ़ रही है या सख्ती से घट रही है। उदाहरण के लिए, यदि इनपुट है nums = [10, 12, 23, 34, 55], तो आउटपुट होगा True, क्योंकि सभी तत्व अलग हैं और प्रत्येक तत्व पिछले से बड़ा है, इसलिए यह सख्ती से बढ़ रहा है। हल करने के चरण