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

सी ++ में एक ऐरे की डिग्री

मान लीजिए कि हमारे पास गैर-ऋणात्मक पूर्णांकों की एक सरणी है जिसे अंक कहा जाता है, इस सरणी की डिग्री वास्तव में इसके किसी एक तत्व की अधिकतम आवृत्ति है। हमें संख्याओं के एक सन्निहित उप-सरणी की सबसे छोटी संभव लंबाई ज्ञात करनी है, जिसमें अंकों के समान डिग्री हो।

इसलिए, यदि इनपुट [1,2,2,3,1] जैसा है, तो आउटपुट 2 होगा, ऐसा इसलिए है क्योंकि इनपुट सरणी में 2 की डिग्री है क्योंकि दोनों तत्व 1 और 2 दो बार दिखाई देते हैं। उप-सरणी जिनकी डिग्री समान है - [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2 , 2, 3], [2, 2] सबसे छोटी लंबाई 2 है। तो उत्तर 2 होगा।

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

  • 50000 आकार की एक सरणी आवृत्ति परिभाषित करें और इसे 0 से भरें
  • अधिकतम_:=0
  • संख्या में प्रत्येक n के लिए
    • (freq[n] 1 से बढ़ाएं)
    • अधिकतम_ :=अधिकतम_ और बारंबारता[n]
  • फ़्रीक सरणी को 0 से भरें।
  • मिनट_ :=अंकों का आकार
  • इनिशियलाइज़ करने के लिए i :=0, j :=-1, size :=nums का आकार, जब j <आकार, करें -
    • यदि j>=0 और freq[nums[j]], max_ के समान है, तो −
      • न्यूनतम_ :=न्यूनतम मिनट_ और j - i + 1
    • अन्यथा जब j <आकार -1, तब −
      • j को 1 से बढ़ाएं
      • फ़्रीक बढ़ाएं[nums[j]] 1 से
    • अन्यथा
      • लूप से बाहर आएं
  • वापसी मिनट_

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findShortestSubArray(vector<int>& nums) {
      vector<int> freq(50000, 0);
      int max_ = 0;
      for (const int n : nums)
         max_ = max(max_, ++freq[n]);
      fill(freq.begin(), freq.end(), 0);
      int min_ = nums.size();
      for (int i = 0, j = -1, size = nums.size(); j < size;) {
         if (j >= 0 && freq[nums[j]] == max_)
            min_ = min(min_, j - i + 1), --freq[nums[i++]];
         else if (j < size - 1)
            ++freq[nums[++j]];
         else
         break;
      }
      return min_;
   }
};
main(){
   Solution ob;
   vector<int> v = {1, 2, 2, 3, 1};
   cout << (ob.findShortestSubArray(v));
}

इनपुट

{1, 2, 2, 3, 1}

आउटपुट

2

  1. सी ++ में ऐरे क्लास

    सी ++ में ऐरे क्लास काफी कुशल हैं और यह अपने आकार को भी जानता है। सरणी पर संचालन करने के लिए उपयोग किए जाने वाले कार्य हैं आकार() =सरणी के आकार को वापस करने के लिए यानी सरणी के तत्वों की संख्या लौटाता है। max_size() =सरणी के तत्वों की अधिकतम संख्या लौटाने के लिए। get(), at(), operator[] =सरणी तत्वो

  1. सी ++ स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की एक सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि सी में कोई तार नहीं था। हमें कैरेक्टर ऐरे का उपयोग करके स्ट्रिंग्स बनाना है। इसलिए स्ट्रिंग्स की कुछ सरणी बनाने के लिए, हमें वर्णों की एक 2-आयामी सरणी बनानी होगी। प्रत्येक पंक्तियाँ उस मैट्रिक्स

  1. सी++ में छँटाई

    इस खंड में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिथम कैसे किया जाता है। एक क्रमबद्ध सरणी एक सरणी है जिसमें प्रत्येक तत्व को किसी क्रम में क्रमबद्ध किया जाता है जैसे संख्यात्मक, वर्णानुक्रम आदि। संख्यात्मक सरणी को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे कि बबलसॉर्ट, इंसर्शन सॉर्ट, सेलेक्शन सॉर्ट, मर्ज