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

C++ में सिंगल रिवर्सल के बाद अधिकतम आसन्न निरपेक्ष मान योग खोजने का कार्यक्रम

मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और हम सूची में किसी भी उप-सूची को एक बार में उलट सकते हैं। इस ऑपरेशन को करने के बाद, हमें

. का अधिकतम संभव मान ज्ञात करना होगा

$\displaystyle\sum\limits_{i=0}^{n-2}| nums[i+1]-[nums[i]|$

इसलिए, यदि इनपुट संख्या =[2, 4, 6] की तरह है, तो आउटपुट 6 होगा, क्योंकि जब हम [4, 6] को उलटते हैं तो हमें [2, 6, 4] और मूल्य के रूप में सूची मिलेगी | 2 - 6| + |6 - 4| =6

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

  • यदि अंकों का आकार <=1, तो -

    • वापसी 0

  • उत्तर:=0

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

  • इनिशियलाइज़ करने के लिए मैं :=1, जब i

    • Ans :=ans + |nums[i] - nums[i − 1]|

  • मूल:=उत्तर

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

    • उत्तर :=अधिकतम उत्तर और मूल − |(nums[i] − nums[i + 1]| + |nums[0] − nums[i + 1]|

    • उत्तर :=अधिकतम उत्तर और मूल − |(nums[i] − nums[i − 1]| + |nums[n − 1] - nums[i − 1]|

  • पीपी:=−|अंक्स[1] - अंक[0]|

  • अपराह्न :=−|अंक्स[1] - अंक[0]|

  • mp :=−|nums[1] − nums[0]|

  • मिमी :=−|अंक्स[1] - अंक[0]|

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

    • jerror :=|nums[j + 1] - nums[j]|

    • उत्तर:=अधिकतम उत्तर और (मूल + पीपी - जेरर - अंक [जे] - अंक [जे + 1])

    • उत्तर:=अधिकतम उत्तर और (मूल + अपराह्न - जेरर - अंक [जे] + अंक [जे + 1])

    • उत्तर:=अधिकतम उत्तर और (मूल + एमपी - जेरर + अंक [जे] - अंक [जे + 1])

    • उत्तर:=अधिकतम उत्तर और (मूल + मिमी - जेरर + अंक [जे] + अंक [जे + 1])

    • पीपी :=अधिकतम पीपी और −|nums[j] − nums[j − 1]|

    • अपराह्न :=अधिकतम अपराह्न और −|nums[j] - nums[j − 1]|

    • mp :=अधिकतम mp और −|nums[j] - nums[j − 1]|

    • मिमी :=अधिकतम मिमी और −|nums[j] − nums[j − 1]|

  • वापसी उत्तर

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>& nums) {
   if (nums.size() <= 1)
   return 0;
   int ans = 0;
   int n = nums.size();
   for (int i = 1; i < n; i++) {
      ans += abs(nums[i] − nums[i − 1]);
   }
   int orig = ans;
   for (int i = 1; i < n − 1; i++) {
      ans = max(ans, orig − abs(nums[i] − nums[i + 1]) +
      abs(nums[0] − nums[i + 1]));
      ans = max(ans, orig − abs(nums[i] − nums[i − 1]) + abs(nums[n
   − 1] − nums[i − 1]));
   }
   int pp = −abs(nums[1] − nums[0]) + nums[0] + nums[1];
   int pm = −abs(nums[1] − nums[0]) + nums[0] − nums[1];
   int mp = −abs(nums[1] − nums[0]) − nums[0] + nums[1];
   int mm = −abs(nums[1] − nums[0]) − nums[0] − nums[1];
   for (int j = 2; j < n − 1; j++) {
      int jerror = abs(nums[j + 1] − nums[j]);
      ans = max(ans, orig + pp − jerror − nums[j] − nums[j + 1]);
      ans = max(ans, orig + pm − jerror − nums[j] + nums[j + 1]);
      ans = max(ans, orig + mp − jerror + nums[j] − nums[j + 1]);
      ans = max(ans, orig + mm − jerror + nums[j] + nums[j + 1]);
      pp = max(pp, −abs(nums[j] − nums[j − 1]) + nums[j − 1] +
      nums[j]);
      pm = max(pm, −abs(nums[j] − nums[j − 1]) + nums[j − 1] −
      nums[j]);
      mp = max(mp, −abs(nums[j] − nums[j − 1]) − nums[j − 1] +
      nums[j]);
      mm = max(mm, −abs(nums[j] − nums[j − 1]) − nums[j − 1] −
      nums[j]);
   }
   return ans;
}
int main(){
   vector<int> v = {2, 4, 6};
   cout << solve(v);
}

इनपुट

{2, 4, 6}

आउटपुट

6

  1. C++ में बाइनरी ट्री में अधिकतम स्तर का योग खोजें

    इस समस्या में, हमें सकारात्मक और नकारात्मक मानों वाला एक बाइनरी ट्री दिया जाता है। हमारा काम बाइनरी ट्री में अधिकतम स्तर का योग ज्ञात करना है। समस्या का विवरण: हमारे पास एक बाइनरी ट्री है, हम बाइनरी ट्री में सभी स्तरों का योग पाएंगे और फिर उनमें से अधिकतम लौटाएंगे। समस्या को समझने के लिए एक उदाह

  1. उस नोड का पता लगाएं जिसका एक्स के साथ पूर्ण अंतर सी ++ में अधिकतम मूल्य देता है

    मान लीजिए कि हमारे पास एक पेड़ है, और सभी नोड्स का वजन और एक पूर्णांक x है। हमें नोड i को खोजना है, जैसे |वेट[i] - x| न्यूनतम है। यदि ग्राफ नीचे जैसा है, और x =15 आउटपुट 3 होगा। अब विभिन्न नोड्स के लिए, यह नीचे जैसा होगा नोड 1, |5 - 15| =10 नोड 2, |10 - 15| =5 नोड 3, |11 - 15| =4 नोड 4, |8 -

  1. पायथन में एक ऑपरेशन के बाद अधिकतम सबअरे का योग जानने का कार्यक्रम

    मान लीजिए, हमें पूर्णांक संख्याओं वाली एक सरणी दी गई है। हम एक ऑपरेशन कर सकते हैं जहां हम array[i] के मान को उसके चुकता मान से बदल सकते हैं; या सरणी [i] * सरणी [i]। इस तरह के केवल एक ऑपरेशन की अनुमति है और हमें ऑपरेशन के बाद अधिकतम संभव सबअरे का योग वापस करना होगा। उपसरणी खाली नहीं हो सकती। इसलिए,