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

सी ++ में अधिकतम समान आवृत्ति

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

इसलिए, यदि इनपुट [3,3,2,2,6,4,4,6] जैसा है, तो आउटपुट 7 होगा, इसलिए यदि हम इंडेक्स 4 से तत्व 6 को हटाते हैं, तो सबअरे [3,] होगा 3,2,2,4,4] जहां सभी तत्व दो बार प्रकट हुए।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • मैक्सफ़:=0, रेस:=0

  • मानचित्रों को परिभाषित करें cnt और freq

  • इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • एक्स:=अंक [i]

    • (cnt[x] 1 से बढ़ाएं)

    • एफ:=सीएनटी [एक्स]

    • (फ़्रीक्वेंसी [f] 1 से बढ़ाएँ)

    • फ़्रीक [f - 1] को 1 से कम करें

    • अधिकतम:=अधिकतम अधिकतम और f

    • अगर maxf * freq[maxf] i या (maxf - 1) * (freq[maxf - 1] + 1) के समान है, तो i या maxf 1 के समान है, तो -

      • रेस :=i + 1

  • रिटर्न रेस

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxEqualFreq(vector<int>& nums) {
      int maxf = 0, res = 0;
      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]--;
         maxf = max(maxf, f);
         if (maxf * freq[maxf] == i || (maxf - 1) * (freq[maxf - 1] + 1) == i || maxf == 1) {
            res = i + 1;
         }
      }
      return res;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,3,2,2,6,4,4,6};
   cout << (ob.maxEqualFreq(v));
}

इनपुट

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

आउटपुट

7

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

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

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

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

  1. सी ++ में उत्पाद के बराबर एलसीएम के साथ अधिकतम लंबाई उपसरणी

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