ধরুন আমাদের সমান দৈর্ঘ্যের পূর্ণসংখ্যার দুটি অ্যারে আছে, আমাদের সর্বাধিক মান খুঁজে বের করতে হবে:|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
রেঞ্জের i জন্য-
arr1[i] – arr2[i] + i ret[0]
-এ ঢোকান -
ret[1]
এ arr1[i] + arr2[i] + i ঢোকান -
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