मान लीजिए कि हमारे पास समान लंबाई वाले पूर्णांकों के दो सरणियाँ हैं, तो हमें इसका अधिकतम मान ज्ञात करना होगा:|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |मैं - जे|। जहाँ अधिकतम मान सभी 0 <=i, j
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
getVal नामक एक विधि को परिभाषित करें, जो सरणी v
. लेगी -
मैक्सवैल:=-इनफ, मिनवैल:=इंफ
-
मैं के लिए 0 से वी के आकार में
-
minVal :=min of v[i] and minVal
-
maxVal :=अधिकतम v[i] और maxVal
-
-
वापसी maxVal - minVal
-
मुख्य विधि से, निम्न कार्य करें
-
आकार 4 का एक सरणी रिट बनाएं
-
n :=arr1 का आकार
-
मैं के लिए 0 से n - 1 की सीमा में
-
arr1[i] - arr2[i] + i को ret[0]
. में डालें -
arr1[i] + arr2[i] + i को रिट में डालें[1]
-
arr1[i] - arr2[i] - i को ret में डालें[2]
-
arr1[i] + arr2[i] - i को ret[3]
. में डालें
-
-
उत्तर :=-इन्फ
-
मेरे लिए 0 से 3 की सीमा में
-
उत्तर:=अधिकतम उत्तर और getVal(ret[i])
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int getVal(vector <int>& v){ int maxVal = INT_MIN; int minVal = INT_MAX; for(int i = 0; i < v.size(); i++){ minVal = min(v[i], minVal); maxVal = max(v[i], maxVal); } return maxVal - minVal; } int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) { vector <int> ret[4]; int n = arr1.size(); for(int i = 0; i < n; i++){ ret[0].push_back(arr1[i] - arr2[i] + i); ret[1].push_back(arr1[i] + arr2[i] + i); ret[2].push_back(arr1[i] - arr2[i] - i); ret[3].push_back(arr1[i] + arr2[i] - i); } int ans = INT_MIN; for(int i = 0; i < 4; i++){ ans = max(ans, getVal(ret[i])); } return ans; } }; main(){ vector<int> v1 = {1,2,3,4}, v2 = {-1, 4, 5, 6}; Solution ob; cout << (ob.maxAbsValExpr(v1, v2)); }
इनपुट
[1,2,3,4] [-1,4,5,6]
आउटपुट
13