मान लीजिए हमारे पास समान लंबाई के दो पूर्णांक सरणी हैं, हमें इसका अधिकतम मान ढूंढना है: |arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|। जहां अधिकतम मान सभी 0 <= i, j < arr1.length पर लिया जाता है। इसलिए अगर दी गई दो सरणी [1,2,3,4] और [-1,4,5,6] हैं, तो आउटपुट 13 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
getVal नामक एक मेथड परिभाषित करें, जो सरणी v लेगा
maxVal := -inf, minVal := inf
i को 0 से v के आकार तक रेंज में लिए:
minVal := v[i] और minVal का न्यूनतम
maxVal := v[i] और maxVal का अधिकतम
maxVal - minVal लौटाएं
मुख्य मेथड से, निम्नलिखित करें:
आकार 4 की एक सरणी ret बनाएं
n := arr1 का आकार
i को 0 से n - 1 तक रेंज में लिए:
arr1[i] - arr2[i] + i को ret[0] में डालें
arr1[i] + arr2[i] + i को ret[1] में डालें
arr1[i] - arr2[i] - i को ret[2] में डालें
arr1[i] + arr2[i] - i को ret[3] में डालें
ans := -inf
i को 0 से 3 तक रेंज में लिए:
ans := ans और getVal(ret[i]) का अधिकतम
ans लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
#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