Computer >> Máy Tính >  >> Lập trình >> C ++

Tối đa Biểu thức Giá trị Tuyệt đối trong C ++

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