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

C++ प्रोग्राम में दी गई शर्त को पूरा करने वाले उप-सरणी का अधिकतम आकार


इस समस्या में, हमें n पूर्णांकों की एक सरणी arr[] दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो दी गई शर्त को पूरा करने वाले उप-सरणी का अधिकतम आकार ढूंढे।

समस्या विवरण

हमें सबसे बड़ी उपसरणी की लंबाई ढूंढनी है जो नीचे दी गई किसी एक शर्त को पूरा करती हो,

  • यदि k विषम है तो arr[k] > arr[k+1] और यदि k सम है तो arr[k] < arr[k+1]। उपसरणी के सभी तत्वों के लिए।
  • यदि k विषम है तो arr[k] < arr[k+1] और यदि k सम है तो arr[k] > arr[k+1]। उपसरणी के सभी तत्वों के लिए।

यहां, k सरणी में उपसरणी के तत्व का सूचकांक है।

उदाहरण

इनपुट

arr[] = {7, 3, 1, 5, 4, 2, 9}

आउटपुट

4

व्याख्या

उपसरणी {3, 1, 5, 4} शर्त 1 को पूरा करती है। 
k = 1(विषम), arr[k] > arr[k+1], 3 > 1 
k = 2(सम), arr[k] < arr[k+1], 1 < 5 
k = 3(विषम), arr[k] > arr[k+1], 5 > 4

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

हम उदाहरण से देख सकते हैं कि किसी भी शर्त के सत्य होने के लिए। उपसरणी में वैकल्पिक बड़े-छोटे तत्व होने चाहिए यानी यदि पहला > दूसरा, तो दूसरा > तीसरा, और इसी तरह।

अब, गणना में आसानी के लिए, हम एक संबंध सरणी बनाएंगे जो इस संबंध को दर्शाती है। निम्नलिखित वह तरीका है जिससे हम संबंध सरणी को तैयार करेंगे,

यदि arr[i] == arr[i + 1], relArr[i] = 'E' 
यदि arr[i] > arr[i + 1], relArr[i] = 'G' 
यदि arr[i] < arr[i + 1], relArr[i] = 'S'

इस सरणी का उपयोग करके हम आसानी से अधिकतम उपसरणी आकार ढूंढ सकते हैं। विचार की जाने वाली उपसरणी में वैकल्पिक 'G' और 'S' होंगे।

उदाहरण

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

#include<iostream> 
using namespace std; 

char findRel(int a, int b) { 
    if(a > b) 
        return 'G'; 
    else if(a < b) 
        return 'S'; 
    return 'E'; 
} 

int calcMaxSubArray(int arr[], int n) { 
    int maxLen = 1; 
    int len = 1; 
    char c = findRel(arr[0], arr[1]); 
    
    for(int i = 1; i <= n-1; i++){ 
        if(c == 'S' && findRel(arr[i], arr[i + 1]) == 'G') 
            len++; 
        else if(c == 'G' && findRel(arr[i], arr[i + 1]) == 'S') 
            len++; 
        else { 
            if(maxLen < (len + 1)) 
                maxLen = (len + 1); 
            len = 1; 
        } 
        c = findRel(arr[i], arr[i+1]); 
    } 
    return maxLen; 
} 

int main() { 
    int arr[] = {7, 3, 1, 5, 4, 2, 9}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout<<"The maximum size of sub-array that satisfies the given condition is "<<calcMaxSubArray(arr, n); 
}

आउटपुट

The maximum size of sub-array that satisfies the given condition is 4
  1. - C++ प्रोग्राम: दिए गए बिंदु को कवर करने वाला सर्वोत्तम फिट आयत ज्ञात करना

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए बिंदु को कवर करने वाला सर्वोत्तम फिट आयत ज्ञात करता है। इस समस्या में, हमें एक बिंदु के निर्देशांक (x,y) और लंबाई/चौड़ाई का अनुपात = l/b (मान लीजिए) दिया जाता है। हमें एक आयत के निर्देशांक ज्ञात करने हैं जिसमें दिया गया बिंदु हो और जिनके आयाम दि

  1. - C++ प्रोग्राम दी गई संख्या के अंकों का योग करने के लिए

    C++ भाषा में अंकों का योग गणना करने का एक उदाहरण निम्नलिखिक है, उदाहरण #include<iostream> using namespace std; int main() {    int x, s = 0;    cout << "संख्या दर्ज करें: ";    cin >> x;    while (x != 0) {       s =

  1. - C# में शर्त को पूरा करने वाला एकमात्र तत्व लौटाना

    Single() विधि वह एकमात्र तत्व लौटाती है जो शर्त को पूरा करता है। यदि एक से अधिक ऐसा तत्व दिखाई देता है, तो त्रुटि फेंकी जाती है। उदाहरण निम्न हमारी स्ट्रिंग सरणी है: string[] str = { jack, tom, henry, time }; अब प्रत्येक तत्व को प्राप्त करने के लिए Single() विधि का उपयोग करें। फिर हमने लैम्ब्डा अभिव