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

सी ++ में कम से कम के योग के साथ सबसे छोटा सबरे

मान लीजिए कि हमारे पास एक सरणी ए है। हमें ए की सबसे छोटी, गैर-रिक्त, सन्निहित उप-सरणी की लंबाई का पता लगाना है, जिसका योग कम से कम के है। यदि ऐसा कोई उप-सरणी नहीं है, तो वापसी -1।

इसलिए, यदि इनपुट [5,3,-2,2,1] और k =6 जैसा है, तो आउटपुट 2 होगा, जैसा कि हम देख सकते हैं (5+3)>=6

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

  • n :=A का आकार

  • उत्तर:=एन + 1, जे:=0, योग:=0

  • एक डेक डीक्यू परिभाषित करें

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • अगर मैं> 0, तो -

      • ए[i] :=ए[i] + ए[i - 1]

    • यदि A[i]>=K, तो −

      • उत्तर:=न्यूनतम उत्तर और i + 1

    • जबकि (dq खाली नहीं है और A[i] - पहला तत्व A[dq]>=K) है, तो −

      करें
      • उत्तर:=न्यूनतम उत्तर और i - dq का पहला तत्व

      • dq से सामने का तत्व हटाएं

    • जबकि (dq खाली नहीं है और A[i] <=A[dq] का अंतिम तत्व, करते हैं -

      • dq से अंतिम तत्व हटाएं

    • dq के अंत में i डालें

  • वापसी (यदि उत्तर n + 1 के समान है, तो -1, अन्यथा उत्तर)

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int shortestSubarray(vector<int> &A, int K) {
      int n = A.size();
      int ans = n + 1;
      int j = 0;
      int sum = 0;
      deque<int> dq;
      for (int i = 0; i < n; i++) {
         if (i > 0)
         A[i] += A[i - 1];
         if (A[i] >= K) {
            ans = min(ans, i + 1);
         }
         while (!dq.empty() && A[i] - A[dq.front()] >= K) {
            ans = min(ans, i - dq.front());
            dq.pop_front();
         }
         while (!dq.empty() && A[i] <= A[dq.back()])
         dq.pop_back();
         dq.push_back(i);
      }
      return ans == n + 1 ? -1 : ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {5,3,-2,2,1};
   cout << (ob.shortestSubarray(v, 6));
}

इनपुट

{5,3,-2,2,1}, 6

आउटपुट

2

  1. सी++ में न्यूनतम आकार सबअरे योग

    मान लीजिए कि हमारे पास n तत्वों की एक सरणी है, और एक सकारात्मक पूर्णांक s है। हमें एक सन्निहित उप-सरणी की न्यूनतम लंबाई ज्ञात करनी है, जिसका योग s के बराबर या अधिक है। यदि कोई नहीं है, तो इसके बजाय 0 लौटाएं। तो अगर सरणी [2,3,1,2,3,4] की तरह है और योग 7 है, तो आउटपुट 2 होगा। यह उपसरणी है [4,3] इस माम

  1. सबरे योग C++ में K के बराबर होता है

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी और एक पूर्णांक k है, तो हमें निरंतर उप-सरणियों की कुल संख्या ज्ञात करनी होगी जिनका योग k के समान है। तो अगर nums array [1, 1, 1] है और k 2 है, तो आउटपुट 2 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक मानचित्र को परिभाषित करें जिसे योग कहा ज

  1. सी++ में अधिकतम सबरे योग मॉड्यूलो एम

    इस समस्या में, हमें n आकार की एक सरणी और एक पूर्णांक m दिया जाता है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो C++ में अधिकतम सबअरे योग मॉड्यूल m ढूंढेगा। कार्यक्रम विवरण - यहां, हम सबएरे के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान प्राप्त करेंगे। समस्या को समझने के लिए एक उदाहरण लेत