ধরুন আমাদের সমান দৈর্ঘ্যের পূর্ণসংখ্যার দুটি অ্যারে আছে, আমাদের সর্বাধিক মান খুঁজে বের করতে হবে:|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|। যেখানে সর্বাধিক মান 0 <=i, j
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
getVal নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, যেটি অ্যারে v
maxVal :=-inf, minVal :=inf
আমি 0 থেকে v
minVal :=min of v[i] এবং minVal
maxVal :=v[i] এবং maxVal
রিটার্ন maxVal – minVal
মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
4 আকারের একটি অ্যারে রেট তৈরি করুন
n :=arr1 এর আকার
0 থেকে n – 1
arr1[i] – arr2[i] + i ret[0]
ret[1]
arr1[i] – arr2[i] - i ret[2]
arr1[i] + arr2[i] - i ret[3]
উত্তর :=-inf
আমি 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