Giả sử chúng ta có hai mảng số nguyên có độ dài bằng nhau, chúng ta phải tìm giá trị lớn nhất của:| arr1 [i] - arr1 [j] | + | arr2 [i] - arr2 [j] | + | i - j |. Trong đó giá trị lớn nhất được lấy trên tất cả 0 <=i, j
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một phương thức được gọi là getVal, phương thức này sẽ lấy mảng v
-
maxVal:=-inf, minVal:=inf
-
cho tôi trong phạm vi từ 0 đến kích thước của v
-
minVal:=min of v [i] và minVal
-
maxVal:=max of v [i] và maxVal
-
-
trả về maxVal - minVal
-
Từ phương thức chính, hãy thực hiện như sau
-
tạo lại một mảng có kích thước 4
-
n:=kích thước của arr1
-
cho tôi trong phạm vi từ 0 đến n - 1
-
chèn arr1 [i] - arr2 [i] + i vào ret [0]
-
chèn arr1 [i] + arr2 [i] + i vào ret [1]
-
chèn arr1 [i] - arr2 [i] - i vào ret [2]
-
chèn arr1 [i] + arr2 [i] - i vào ret [3]
-
-
ans:=-inf
-
cho tôi trong phạm vi 0 đến 3
-
ans:=max of ans và getVal (ret [i])
-
-
trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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)); }
Đầu vào
[1,2,3,4] [-1,4,5,6]
Đầu ra
13