এই সমস্যায় সমান দৈর্ঘ্যের দুটি ইন্টিজার অ্যারে দেওয়া আছে। নিচের এক্সপ্রেশন-এর সর্বোচ্চ মান বের করতে হবে:
|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|
উদাহরণ
ইনপুট: [1,2,3,4], [-1,4,5,6]
আউটপুট: 13
অপ্টিমাইজড সমাধান
এক্সপ্রেশনটি ৪টি কেসে ভাগ করা যায় (অ্যাবসোলিউট ভ্যালু খোলার মাধ্যমে)। প্রতিটি কেসে arr1[i] ± arr2[i] ± i ফর্মের ভ্যালু বের করে তার ম্যাক্স-মিনের পার্থক্য নিলে সমাধান পাওয়া যায়।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
class Solution {
int getVal(vector<int>& v) {
int maxVal = INT_MIN, minVal = INT_MAX;
for (int x : v) {
minVal = min(minVal, x);
maxVal = max(maxVal, x);
}
return maxVal - minVal;
}
public:
int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) {
vector<int> v[4];
int n = arr1.size();
for (int i = 0; i < n; i++) {
v[0].push_back(arr1[i] - arr2[i] + i);
v[1].push_back(arr1[i] + arr2[i] + i);
v[2].push_back(arr1[i] - arr2[i] - i);
v[3].push_back(arr1[i] + arr2[i] - i);
}
int ans = INT_MIN;
for (int i = 0; i < 4; i++)
ans = max(ans, getVal(v[i]));
return ans;
}
};
int main() {
vector<int> v1 = {1,2,3,4}, v2 = {-1,4,5,6};
Solution ob;
cout << ob.maxAbsValExpr(v1, v2);
return 0;
}
আউটপুট
13