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

सी++ में ऐरे साइज को आधा कर दें


मान लीजिए कि हमारे पास एक सरणी गिरफ्तारी है। हम पूर्णांकों का एक सेट चुन सकते हैं और सरणी में इन पूर्णांकों की सभी घटनाओं को हटा सकते हैं। हमें समुच्चय का न्यूनतम आकार ज्ञात करना है ताकि सरणी के कम से कम आधे पूर्णांकों को हटा दिया जाए। तो उदाहरण के लिए, अगर arr =[3,3,3,3,5,5,5,2,2,7], तो आउटपुट 2 होगा। ऐसा इसलिए है क्योंकि अगर हम {3,7} चुनते हैं तो यह होगा नई सरणी [5,5,5,2,2] जिसका आकार 5 है (यह पुराने सरणी के आकार के आधे के बराबर है)। आकार 2 के संभावित सेट {3,5},{3,2},{5,2} हैं। सेट {2,7} का चयन करना संभव नहीं है क्योंकि यह नई सरणी [3,3,3,3,5,5,5] बना देगा, जिसका आकार पुराने सरणी के आकार के आधे से अधिक है।

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

  • मानचित्र को परिभाषित करें m, n :=arr का आकार, arr में मौजूद प्रत्येक तत्व की आवृत्ति को मानचित्र m में संग्रहीत करें

  • एक सरणी को परिभाषित करें जिसे अस्थायी कहा जाता है, sz:=n, और ret:=0

  • प्रत्येक की-वैल्यू पेयर के लिए इसे m

    . में जोड़ें
    • इसका मान अस्थायी में डालें

  • अस्थायी सरणी क्रमबद्ध करें

  • मैं के लिए 0 से लेकर अस्थायी के आकार तक

    • अगर sz <=n / 2, तो लूप से ब्रेक करें

    • रिट को 1 से बढ़ाएं

    • तापमान से sz घटाएं[i]

  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minSetSize(vector<int>& arr) {
      unordered_map <int, int> m;
      int n = arr.size();
      for(int i = 0; i < n; i++){
         m[arr[i]]++;
      }
      vector <int> temp;
      unordered_map <int, int> :: iterator it = m.begin();
      int sz = n;
      int ret = 0;
      while(it != m.end()){
         temp.push_back(it->second);
         it++;
      }
      sort(temp.rbegin(), temp.rend());
      for(int i = 0; i < temp.size(); i++){
         if(sz <= n / 2)break;
         ret++;
         sz -= temp[i];
      }
      return ret;
   }
};
main(){
   vector<int> v = {3,3,3,3,5,5,5,2,2,7};
   Solution ob;
   cout << (ob.minSetSize(v));
}

इनपुट

[3,3,3,3,5,5,5,2,2,7]

आउटपुट

2

  1. छवि फ़ाइल पर आकार कैसे कम करें

    पहले, मैंने एक्सप्लोरर में बिल्ट-इन ईमेल विकल्प का उपयोग करके या विंडोज के लिए इमेज रिसाइज़र नामक डेस्कटॉप प्रोग्राम का उपयोग करके एक छवि फ़ाइल के आकार को कम करने के बारे में एक लेख लिखा था। ये अच्छे विकल्प हैं, लेकिन इमेज को ऑप्टिमाइज़ करने के और भी कई तरीके हैं। साथ ही, बहुत सी वेबसाइटें आपको पेंट

  1. सी ++ में भूलभुलैया

    मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद की स्थिति, गंतव्य और भूलभुलैया शुरू

  1. C++ में Array Decay क्या है?

    किसी सरणी के प्रकार और आयामों के नुकसान को सरणी क्षय के रूप में जाना जाता है। यह तब होता है जब हम पॉइंटर या वैल्यू द्वारा एरे को फंक्शन में पास करते हैं। पहला पता उस सरणी को भेजा जाता है जो एक सूचक है। इसीलिए, सरणी का आकार मूल नहीं है। यहाँ C++ भाषा में सरणी क्षय का एक उदाहरण दिया गया है, उदाहरण #i