मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और हम सूची में किसी भी उप-सूची को एक बार में उलट सकते हैं। इस ऑपरेशन को करने के बाद, हमें
. का अधिकतम संभव मान ज्ञात करना होगा$\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