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

C++ में अधिकतम समान आवृत्ति (Maximum Equal Frequency)


समस्या विवरण

धनात्मक पूर्णांकों की एक सरणी nums दी गई है। सबसे लंबे प्रीफिक्स (prefix) की लंबाई ज्ञात करनी है जिससे ठीक एक तत्व हटाने के बाद, शेष सभी संख्याओं की आवृत्ति (frequency) समान हो जाए। यदि हटाने के बाद कोई तत्व न बचे, तो भी मान्य माना जाता है (आवृत्ति 0)।

उदाहरण

इनपुट

[3,3,2,2,6,4,4,6]

आउटपुट

7

व्याख्या: सूचकांक 4 पर 6 को हटाने पर: [3,3,2,2,4,4,6] - सभी संख्याएं 2 बार आती हैं।

समाधान दृष्टिकोण (आवृत्ति ट्रैकिंग)

प्रत्येक तत्व जोड़ते समय दो मैप बनाए रखें:

  • cnt[x]: तत्व x की वर्तमान आवृत्ति
  • freq[f]: आवृत्ति f वाले तत्वों की संख्या

प्रीफिक्स लंबाई i+1 वैध है यदि:

  1. maxFreq * freq[maxFreq] == i (एक तत्व की आवृत्ति maxFreq+1 है, बाकी maxFreq)
  2. (maxFreq-1) * (freq[maxFreq-1]+1) == i (एक तत्व की आवृत्ति 1 है, बाकी maxFreq)
  3. maxFreq == 1 (सभी तत्व अद्वितीय हैं)

कार्यकारी प्रोग्राम

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

class Solution {
public:
    int maxEqualFreq(vector<int>& nums) {
        int maxFreq = 0, res = 0;
        unordered_map<int, int> cnt, freq;
        
        for (int i = 0; i < nums.size(); i++) {
            int x = nums[i];
            cnt[x]++;
            int f = cnt[x];
            freq[f]++;
            freq[f-1]--;
            maxFreq = max(maxFreq, f);
            
            if (maxFreq * freq[maxFreq] == i ||
                (maxFreq - 1) * (freq[maxFreq - 1] + 1) == i ||
                maxFreq == 1) {
                res = i + 1;
            }
        }
        return res;
    }
};

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

आउटपुट

7
  1. - C++ में तीन स्टैक का संभावित समान अधिकतम योग ज्ञात करें

    मान लीजिए हमारे पास धनात्मक संख्याओं के तीन स्टैक हैं। हमें शीर्ष तत्वों को हटाने की अनुमति के साथ स्टैक के संभावित समान अधिकतम योग को ज्ञात करना है। स्टैक को सरणी के रूप में दर्शाया गया है। सरणी का पहला सूचकांक स्टैक के शीर्ष तत्व को दर्शाता है। मान लीजिए स्टैक तत्व हैं जैसे [3, 10], [4, 5] और [2,

  1. - C++ में चतुर्भुज का अधिकतम क्षेत्रफल

    समस्या कथन चतुर्भुज की चार भुजाएं a, b, c, d दी गई हैं, दी गई भुजाओं से बनने वाले चतुर्भुज का अधिकतम क्षेत्रफल ज्ञात करें। एल्गोरिदम हम इस समस्या को हल करने के लिए ब्रह्मगुप्त के सूत्र का उपयोग कर सकते हैं: √((s-a)(s-b)(s-c)(s-d)) उपरोक्त सूत्र में s अर्ध-परिमाप है। इसकी गणना निम्नानुसार की जाती ह

  1. - C++ में LCM उत्पाद के बराबर होने वाले अधिकतम लंबाई के सबएरे

    मान लीजिए हमारे पास एक सरणी A है। हमें सबएरे की अधिकतम लंबाई ढूंढनी है, जिसका LCM उस सबएरे के एलिमेंट्स के उत्पाद के समान है। यदि ऐसा सबएरे नहीं मिलता, तो -1 वापस करें। मान लीजिए सरणी {6, 10, 21} है, तो लंबाई 2 है, क्योंकि सबएरे {10, 21} है, जिसका LCM 210 है, और उत्पाद भी 210 है। दृष्टिकोण सीधा है।