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

C++ में उपसरणी उलटकर सरणी मान को अधिकतम करना

मान लीजिए हमारे पास nums नामक एक पूर्णांक सरणी है। इस सरणी का मान सभी i के लिए 0 से n-1 की सीमा में |nums[i]-nums[i+1]| के योग के रूप में परिभाषित है। जहां n सरणी का आकार है। हम दी गई सरणी के किसी भी उपसरणी का चयन कर सकते हैं और उसे उलट सकते हैं। हम यह ऑपरेशन केवल एक बार कर सकते हैं। फिर हमें अंतिम सरणी का अधिकतम संभव मान ज्ञात करना है।

यदि इनपुट [1,5,4,2,3] है, तो आउटपुट 10 होगा।

हल करने के चरण

  • ret := 0, extra := 0

  • n := nums का आकार

  • minVal := INF, maxVal := -INF

  • 0 से n-2 तक के लिए: a := nums[i], b := nums[i+1], ret += |b-a|, extra = max(extra, |nums[0]-b| - |a-b|), extra = max(extra, |nums[n-1]-a| - |a-b|), maxVal = max(maxVal, min(a,b)), minVal = min(minVal, max(a,b))

  • ret + max(extra, (maxVal - minVal) * 2) लौटाएं

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int maxValueAfterReverse(vector<int>& nums) { 
        int ret = 0; 
        int extra = 0; 
        int n = nums.size(); 
        int minVal = INT_MAX; 
        int maxVal = INT_MIN; 
        for(int i = 0; i < n - 1; i++) { 
            int a = nums[i]; 
            int b = nums[i + 1]; 
            ret += abs(b - a); 
            extra = max(extra, abs(nums[0] - b) - abs(a - b)); 
            extra = max(extra, abs(nums[n - 1] - a) - abs(a - b)); 
            maxVal = max(maxVal, min(a, b)); 
            minVal = min(minVal, max(a, b)); 
        } 
        return ret + max(extra, (maxVal - minVal) * 2); 
    } 
}; 

int main() { 
    Solution ob; 
    vector<int> v = {1,5,4,2,3}; 
    cout << (ob.maxValueAfterReverse(v)); 
    return 0; 
}

इनपुट

{1,5,4,2,3}

आउटपुट

10
  1. - C++ प्रोग्राम: सरणी में सबसे छोटे मान की आवृत्ति ज्ञात करना

    यहां हम देखेंगे कि सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लें सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहां सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। इसलिए आउटपुट 4 है। इसे हल करने के लिए हम सूची का सबसे छोटा तत्व ज्ञात करेंगे, फिर पहले नंबर की घटनाओं को गिनेंगे

  1. - C++ STL में array::crbegin() और array::crend()

    array::crbegin() और array::crend() यहां हम C++ STL में सरणी के crbegin() और crend() फंक्शन्स देखेंगे। array::crbegin() फंक्शन का उपयोग रिवर्स इटरेटर प्राप्त करने के लिए किया जाता है। यह कंटेनर के अंतिम तत्व को इंगित करने वाला कॉन्स्टेंट रिवर्स इटरेटर लौटाता है। यह फंक्शन कोई पैरामीटर नहीं लेता। a

  1. - C++ में STL का उपयोग करके सरणी के सभी रिवर्स परम्यूटेशन

    समस्या विवरण इस खंड में हम देखेंगे कि C++ में STL का उपयोग करके सभी रिवर्स परम्यूटेशन कैसे उत्पन्न करें। (1, 2, 3) जैसे कुछ नंबरों के फॉरवर्ड और रिवर्स परम्यूटेशन इस प्रकार होंगे: फॉरवर्ड परम्यूटेशन 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 रिवर्स परम्यूटेशन 3, 2, 1 3, 1, 2 2, 3, 1 2, 1, 3