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

अधिकतम उपसरणी आकार, जैसे कि उस आकार के सभी उपसरणियों का योग C++ प्रोग्राम में k से कम है

इस समस्या में, हमें n धनात्मक पूर्णांकों और पूर्णांक k से मिलकर बना एक सरणी arr[] दिया गया है। हमारा काम मैक्सिममसुबरे आकार को खोजने के लिए एक प्रोग्राम बनाना है, जैसे कि उस आकार के सभी उप-सरणी का योग k से कम हो।

समस्या का विवरण - हमें एक सबअरे का सबसे बड़ा आकार खोजने की जरूरत है, जैसे कि एरे के तत्वों से आकार से बने सभी सबअरे में के से कम या उसके बराबर तत्वों का योग होगा।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

arr[n] = {4, 1, 3, 2}, k = 9

आउटपुट

3

स्पष्टीकरण

आकार 3 के सभी उप-सरणी और उनका योग −

{4, 1, 3} = 8
{1, 3, 2} = 6
The sum of all subarrays of size 3 is less than or equal to k.

समाधान दृष्टिकोण

समस्या का एक सरल समाधान उप-सरणी का पता लगाना है जिसका आकार k से बड़ा हो सकता है। इसके लिए, हम एक उपसर्ग योग बनाएंगे जो दिए गए सूचकांक तक तत्वों के योग को दर्शाता है। इस उपसर्ग योग के लिए, हम अधिकतम परिणाम पाएंगे जो k से कम है और इसका सूचकांक हमारा परिणाम होगा। यहां, हमने इस तथ्य का उपयोग किया है कि यदि उपसर्ग योग किसी भी आकार के लिए k से अधिक है, और बाकी सभी का योग है कम है, तो आकार -1 लंबाई के सभी उप-सरणी का योग k से कम होगा।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

#include<iostream>
using namespace std;
int calcSubArraySize(int arr[], int n, int k){
   int prefixSum[n + 1];
   prefixSum[0] = 0;
   for (int i = 0; i < n; i++)
   prefixSum[i + 1] = prefixSum[i] + arr[i];
   // Searching size
   int maxLen = −1;
   int start = 1, end = n;
   int mid, i;
   while (start <= end){
      int mid = (start + end) / 2;
      for (i = mid; i <= n; i++){
         if (prefixSum[i] − prefixSum[i − mid] > k)
         break;
      }
      if (i == n + 1){
         start = mid + 1;
         maxLen = mid;
      }
      else
      end = mid − 1;
   }
   return maxLen;
}
int main(){
   int arr[] = {4, 1, 2, 3};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 9;
   cout<<"The maximum subarray size, such that all subarrays of that
   size have sum less than k is "<<calcSubArraySize(arr, n, k);
   return 0;
}

आउटपुट

यह विधि कुशल है लेकिन समस्या को हल करने के लिए एक बेहतर तरीका अपनाया जा सकता है,

इस दृष्टिकोण में, हम सबएरे के योग को खोजने के लिए स्लाइडिंग विंडो विधि का उपयोग करेंगे। सभी तत्वों को लेने से हम वह लंबाई ज्ञात करेंगे जब तक योग k से ऊपर रहता है। और फिर लंबाई - 1 लौटाएं, जो कि उप-सरणी का अधिकतम आकार है जिसके लिए सभी उप-सरणी का योग 0 से कम या उसके बराबर है।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

#include <iostream>
using namespace std;
int calcSubArraySizeSW(int arr[], int n, int k){
   int maxLen = n;
   int subArraySum = 0;
   int start = 0;
   for (int end = 0; end < n; end++){
      subArraySum += arr[end];
      while (subArraySum > k) {
         subArraySum −= arr[start];
         start++;
         maxLen = min(maxLen, end − start + 1);
         if (subArraySum == 0)
            break;
      }
      if (subArraySum == 0) {
         maxLen = −1;
         break;
      }
   }
   return maxLen;
}
int main(){
   int arr[] = { 4, 1, 3, 2, 6 };
   int k = 12;
   int n = sizeof(arr)/ sizeof(arr[0]);
   cout<<"The maximum subarray size, such that all subarrays of that
   size have sum less than k is "<<calcSubArraySizeSW(arr, n, k);
   return 0;
}

आउटपुट

The maximum subarray size, such that all subarrays of that size have sum
less than k is 4
है
  1. C++ में दी गई राशि से कम या उसके बराबर राशि वाले अधिकतम योग उप-सरणी

    इस समस्या में, हमें एक सरणी और एक योग दिया जाता है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो c++ में दिए गए योगों से कम या उसके बराबर राशि वाले अधिकतम योग उप-सरणी को खोजेगा। हमें n से कम या उसके बराबर किसी भी लंबाई का उप-सरणी ज्ञात करना है जिसका योग दिए गए योग से कम या उसके बराबर है। समस्या को समझने

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

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

  1. ऐसे तत्वों की अधिकतम संख्या ज्ञात कीजिए जिनका निरपेक्ष अंतर C++ में 1 से कम या बराबर हो

    मान लीजिए कि हमारे पास n तत्वों की एक सरणी है। हमें सरणी से चयन करने के लिए तत्वों की अधिकतम संख्या का पता लगाना है, जैसे कि चुने हुए तत्वों में से किन्हीं दो के बीच पूर्ण अंतर 1 से कम या बराबर है। इसलिए यदि सरणी [2, 2, 3, 4, की तरह है, 5], तो तत्व 3 होगा, इसलिए अधिकतम गिनती वाला क्रम 2, 2, 3 है। 0