কম্পিউটার টিউটোরিয়াল

এবসোলিউট ভ্যালু এক্সপ্রেশন-এর সর্বোচ্চ মান (C++)

এই সমস্যায় সমান দৈর্ঘ্যের দুটি ইন্টিজার অ্যারে দেওয়া আছে। নিচের এক্সপ্রেশন-এর সর্বোচ্চ মান বের করতে হবে:

|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
  1. C++-এ অ্যারে থেকে যুগল তৈরি করে সর্বোচ্চ বিটওয়াইজ AND মান

  2. C++-এ দেওয়া এক্সপ্রেশনের মান সর্বাধিক করা

  3. সি++ প্রোগ্রাম: যেকোনো বীজগাণিতিক অভিব্যক্তির সর্বোচ্চ মান (Maximum Value) বের করা

  4. C++-এ ল্যাম্বডা এক্সপ্রেশন