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

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

हमें एक सरणी दी गई है arr[] जिसमें पूर्णांक तत्व और एक चर k है। लक्ष्य एआर के उप-सरणी की गिनती का पता लगाना है [] जिसमें सबसे बड़ा/अधिकतम तत्व अधिक है के। यदि सरणी [1,2,3] है और k 1 है। तब संभावित उप-सरणी हैं [1], [2], [3], [1,2], [2,3], [1,2,3 ]. अधिकतम तत्व> 1 के साथ उप-सरणी [2], [3], [1,2], [2,3], [1,2,3] हैं। तो गिनती 5 है।

आइए उदाहरणों के साथ समझते हैं

इनपुट - गिरफ्तारी [] ={1,2,5,3 } k=3

आउटपुट − उपसरणियों की संख्या जिनका अधिकतम तत्व k से बड़ा है − 6

स्पष्टीकरण -सभी संभावित उप-सरणी हैं [1], [2], [5], [3], [1,2], [2,5], [5,3], [1,2,5], [2, 5,3], [1,2,5,3]। इन सरणियों में से अधिकतम 3 से अधिक तत्वों वाले ऐसे सरणियाँ हैं जिनमें 5 हैं। वे हैं -

[5], [2,5], [5,3], [1,2,5], [2,5,3], [1,2,5,3]।

कुल 6 उप-सरणी।

इनपुट - गिरफ्तारी [] ={1,2,3,4,5 } k=4

आउटपुट − उपसरणियों की संख्या जिनका अधिकतम तत्व k से बड़ा है − 5

स्पष्टीकरण − केवल 4 से बड़े एलिमेंट 5 हैं। 5 वाले सबअरे होंगे -

[5], [4,5], [3,4,5], [2,3,4,5], [1,2,3,4,5]।

कुल 5 उप-सरणी।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

इस दृष्टिकोण में हम जानते हैं कि n तत्वों के साथ सरणी के उपसरणियों की कुल संख्या n*(n+1)/2 है।

अब हम ऐसे उप-सरणियों की तलाश करेंगे जिनमें तत्व k को छोड़ देते हैं और k से कम सभी तत्वों के साथ उप-सरणी की लंबाई की गणना करते हैं। प्रत्येक लंबाई l के लिए, प्रत्येक उप-सरणी l*(l+1)/2 उप-सरणी बना सकता है। इस तरह के प्रत्येक उप-सरणी के लिए इस मान को X में जोड़ें। अब अंत में हम वांछित परिणाम प्राप्त करने के लिए इस मान X को n*(n+1)/2 से घटाते हैं।

  • इनपुट के रूप में पूर्णांक सरणी arr[] और वेरिएबल k लें।

  • फ़ंक्शन max_k(int arr[], int size, int k) सरणी, k और सरणी की लंबाई लेता है और उन सबएरे की गिनती देता है जिसका अधिकतम तत्व k से बड़ा है

  • प्रारंभिक गणना 0 के रूप में लें।

  • लूप के दौरान, अनुक्रमणिका i=0 से i<आकार तक ट्रैवर्स सरणी का उपयोग करना।

  • प्रत्येक तत्व के लिए यदि arr[i]>k जारी रखें कथन का उपयोग करके इसे छोड़ दें।

  • अन्यथा एक आंतरिक जबकि लूप का उपयोग करके उपसरणी की लंबाई गिनना शुरू करें।

  • अगर गिरफ्तारी [i] <के और मैं <आकार। वृद्धि मैं और अस्थायी (सभी तत्वों के साथ उप-सरणी की लंबाई

  • आंतरिक के अंत में, जबकि हमारे पास वर्तमान उप-सरणी की लंबाई अस्थायी है।

    temp*(temp+1)/2 की गणना करें और गिनती में जोड़ें।

  • ऐसा सभी उपसरणियों के लिए करें।

  • बाहरी समय के अंत में। हमारे पास तत्वों के साथ सभी उपसरणियों की संख्या के रूप में चर गणना है

  • एआर [], यानी आकार*(आकार-1)/2 की सभी संभावित उप-सरणी की संख्या से इस गिनती को घटाकर गिनती अपडेट करें।

  • परिणाम के रूप में वापसी की गिनती।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int maximum_k(int arr[], int size, int k){
   int count = 0;
   int i = 0;
   while (i < size){
      if (arr[i] > k){
         i++;
         continue;
      }
      int temp = 0;
      while (i < size && arr[i] <= k){
         i++;
         temp++;
      }
      int temp_2 = temp * (temp + 1);
      count = count + temp_2 / 2;
   }
   count = (size * (size + 1) / 2 - count);
   return count;
}
int main(){
   int arr[] = { 4, 1, 2, 7, 8, 3 };
   int k = 5;
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of subarrays whose maximum element is greater than k are: "<<maximum_k(arr, size, k);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of subarrays whose maximum element is greater than k are: 14

  1. C++ में b से अधिक वाले उपसर्ग

    इस समस्या में, हमें स्ट्रिंग str दिया जाता है जिसमें केवल a और b होता है और एक पूर्णांक N होता है जैसे कि str n बार जोड़कर एक स्ट्रिंग बनाई जाती है। हमारा काम सबस्ट्रिंग की कुल संख्या को प्रिंट करना है जिसमें a की गिनती b की गिनती से अधिक है। आइए समस्या को समझने के लिए एक उदाहरण लेते हैं Input: aab

  1. सी ++ में पिछला बड़ा तत्व

    इस समस्या में, हमें एक सरणी दी जाती है। हमारा काम सरणी में वर्तमान तत्व से पहले सबसे बड़े तत्व को वापस करना है अन्यथा प्रिंट -1। आइए समस्या को समझने के लिए एक उदाहरण लेते हैं Input: {6, 2, 7, 1, 5, 3} Output: -1, 6, -1, 7, 7, 7 इस समस्या को हल करने के लिए, एक आसान और स्पष्ट समाधान नेस्टेड लूप का उ

  1. एक क्रमबद्ध सरणी में तत्व खोजें जिसकी आवृत्ति C++ में n/2 से अधिक या उसके बराबर हो।

    मान लें कि हमारे पास आकार n के साथ एक सरणी है। यह सरणी क्रमबद्ध है। एक तत्व है जिसकी आवृत्ति n/2 से अधिक या उसके बराबर है, जहाँ n सरणी में तत्वों की संख्या है। तो अगर सरणी [3, 4, 5, 5, 5] की तरह है, तो आउटपुट 5 होगा। यदि हम इस प्रकार के सरणी को बारीकी से देखें, तो हम आसानी से देख सकते हैं कि जिस सं