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

C++ में कैंडी


मान लीजिए कि N बच्चे हैं, वे एक पंक्ति में खड़े हैं। यहां प्रत्येक बच्चे को एक रेटिंग मान दिया जाता है। हम इन बच्चों को निम्नलिखित आवश्यकताओं के अधीन कैंडी की आपूर्ति कर रहे हैं -

  • प्रत्येक बच्चे के पास कम से कम एक कैंडी होनी चाहिए।

  • जिन बच्चों की रेटिंग अधिक है, उन्हें अपने पड़ोसियों की तुलना में अधिक कैंडी मिलेगी।

हमें कैंडीज की न्यूनतम संख्या ज्ञात करनी होगी जो हमें देनी चाहिए?

तो अगर इनपुट [1,1,3] जैसा है, तो आउटपुट 4 होगा। तो उन्हें क्रमशः 1, 1 और 2 कैंडी मिलेंगे।

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

  • n:=सरणी रेटिंग का आकार, आकार n का dp नामक सरणी बनाएं, इसे 1

    का उपयोग करके भरें
  • रिट:=0

  • मैं के लिए 1 से n - 1 की सीमा में

    • अगर रेटिंग [i]> रेटिंग [i – 1], तो dp[i] :=dp[i - 1] + 1

  • मेरे लिए n - 2 से 0 तक की श्रेणी में है

    • अगर रेटिंग [i]> रेटिंग [i + 1], तो dp[i] :=अधिकतम dp[i] और dp[i + 1] + 1

  • रिट:=डीपी के तत्वों का योग

  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int candy(vector<int>& ratings) {
      int n = ratings.size();
      vector <int> dp(n, 1);
      int ret = 0;
      for(int i = 1; i < n; i++){
         if(ratings[i] > ratings[i - 1]){
            dp[i] = dp[i - 1] + 1;
         }
      }
      for(int i = n - 2; i >= 0; i--){
         if(ratings[i] > ratings[i + 1]){
            dp[i] = max(dp[i], dp[i + 1] + 1);
         }
      }
      for(int i = 0; i < n; i+=1){
         ret += dp[i];
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,1,3};
   cout << (ob.candy(v));
}

इनपुट

[1,1,3]

आउटपुट

4

  1. सी ++ में प्रक्रिया को मारें

    मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

  1. सी ++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ

  1. C++ में आयत क्षेत्र II

    मान लीजिए कि हमारे पास (अक्ष-संरेखित) आयतों की एक सूची है। यहाँ प्रत्येक आयत [i] ={x1, y1, x2, y2}, जहाँ (x1, y1) निचले-बाएँ कोने का बिंदु है, और (x2, y2) ऊपरी-दाएँ कोने के बिंदु हैं आयत। हमें समतल में सभी आयतों द्वारा कवर किया गया कुल क्षेत्रफल ज्ञात करना है। उत्तर बहुत हो सकता है, इसलिए हम मॉड्यू