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

C++ में जंगल में खरगोश


मान लीजिए एक जंगल में, प्रत्येक खरगोश का कुछ रंग होता है। अब खरगोशों का कुछ सबसेट (संभवतः सभी) हमें बताएंगे कि कितने अन्य खरगोशों का वही रंग है जो उनका है। उन उत्तरों को एक सरणी में रखा जाता है। हमें जंगल में हो सकने वाले खरगोशों की न्यूनतम संख्या ढूंढनी है। तो यदि इनपुट [1,1,2] जैसा है, तो आउटपुट 5 होगा, क्योंकि जिन दो खरगोशों ने "1" का उत्तर दिया वे दोनों एक ही रंग के हो सकते हैं, मान लीजिए सफेद। अब जिस खरगोश ने "2" का उत्तर दिया वह सफेद नहीं हो सकता या उत्तर असंगत होंगे। मान लीजिए जिस खरगोश ने "2" का उत्तर दिया वह काला था। तो जंगल में 2 अन्य काले खरगोश होने चाहिए जिन्होंने सरणी में उत्तर नहीं दिया। तो जंगल में खरगोशों की न्यूनतम संभावित संख्या इसलिए 5 है: 3 जिन्होंने उत्तर दिया और 2 जिन्होंने नहीं दिया।

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

  • एक मैप m बनाएं, और n := ans सरणी का आकार
  • ret को 0 पर सेट करें
  • i को 0 से n - 1 की रेंज में
    • x := ans[i]
    • यदि x = 0 है, तो ret को 1 से बढ़ाएं, और इस पुनरावृत्ति के अगले भाग को छोड़ दें।
    • यदि m में x है, तो ret को (x + 1) से बढ़ाएं, m[x] := 0 सेट करें
    • अन्यथा
      • m[x] को 1 से बढ़ाएं
      • यदि m[x] = x है, तो m से x को हटा दें
  • ret लौटाएं

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

उदाहरण

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

class Solution {
public:
    int numRabbits(vector<int>& ans) {
        map <int, int> m;
        int n = ans.size();
        int ret = 0;
        for(int i = 0; i < n; i++){
            int x = ans[i];
            if(x == 0){
                ret++;
                continue;
            }
            if(!m.count(x)){
                ret += (x + 1);
                m[x] = 0;
            }else{
                m[x]++;
                if(m[x] == x){
                    m.erase(x);
                }
            }
        }
        return ret;
    }
};

main(){
    vector<int> v = {1,1,2};
    Solution ob;
    cout << (ob.numRabbits(v));
}

इनपुट

[1,1,2]

आउटपुट

5

  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस