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

सी ++ में सरणी मान को अधिकतम करने के लिए सबरे को उल्टा करें


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

इसलिए, अगर इनपुट [1,5,4,2,3] जैसा है, तो आउटपुट 10 होगा।

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

  • रिट :=0, अतिरिक्त :=0

  • n :=अंकों का आकार

  • minVal :=inf, maxVal :=-inf

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

    • ए:=अंक [i], बी:=अंक [i + 1]

    • रिट:=रिट + |बी - ए|

    • अतिरिक्त :=अधिकतम अतिरिक्त और |(nums[0] - b) - |a - b||

    • अतिरिक्त :=अधिकतम अतिरिक्त और |(nums[n - 1] - a) - |a - b||

    • maxVal :=अधिकतम अधिकतम वैल और न्यूनतम a और b

    • minVal :=न्यूनतम minVal और अधिकतम a और b

  • रिटर्न रिट + अधिकतम अतिरिक्त और (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);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,5,4,2,3};
   cout << (ob.maxValueAfterReverse(v));
}

इनपुट

{1,5,4,2,3}

आउटपुट

10

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

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

  1. सी ++ एसटीएल में ऐरे ::crbegin () और सरणी ::क्रेंड ()?

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

  1. सी ++ में एसटीएल का उपयोग कर सरणी के सभी रिवर्स क्रमपरिवर्तन?

    इस खंड में हम देखेंगे कि 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 1, 3, 2 1,