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

C++-এ সাবঅ্যারে রিভার্স করে অ্যারে ভ্যালু সর্বোচ্চ করা


ধরি nums নামক একটি ইন্টিজার অ্যারে দেওয়া আছে। এই অ্যারের ভ্যালু হলো সব i (0 থেকে n-2) এর জন্য |nums[i] - nums[i+1]| এর যোগফল। আমরা অ্যারের যেকোনো একটি সাবঅ্যারে বেছে নিয়ে সেটা রিভার্স করতে পারি। এই অপারেশন শুধু একবার করা যাবে। তারপর ফাইনাল অ্যারের সর্বোচ্চ সম্ভাব্য ভ্যালু বের করতে হবে।

ইনপুট যদি [1,5,4,2,3] হয়, তবে আউটপুট হবে 10।

সমাধানের ধাপসমূহ

  • ret := 0, extra := 0

  • n := nums এর আকার

  • minVal := inf, maxVal := -inf

  • i := 0 থেকে n-2 পর্যন্ত লুপ চালান –

    • a := nums[i], b := nums[i+1]

    • ret := ret + |b - a|

    • extra := max(extra, |nums[0] - b| - |a - b|)

    • extra := max(extra, |nums[n-1] - a| - |a - b|)

    • maxVal := max(maxVal, min(a, b))

    • minVal := min(minVal, max(a, b))

  • ret + max(extra, (maxVal - minVal) * 2) ফেরত দিন

বेहतर বোঝার জন্য নিচের কোডটি দেখুন –

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int maxValueAfterReverse(vector<int>& nums) {       int ret = 0;       int extra = 0;       int n = nums.size();       int minVal = INT_MAX;       int maxVal = INT_MIN;       for(int i = 0; i < n - 1; i++){          int a = nums[i];          int b = nums[i + 1];          ret += abs(b - a);          extra = max(extra, abs(nums[0] - b) - abs(a - b));          extra = max(extra, abs(nums[n - 1] - a) - abs(a - b));          maxVal = max(maxVal, min(a, b));          minVal = min(minVal, max(a, b));       }       return ret + max(extra, (maxVal - minVal) * 2);    } }; main(){    Solution ob;    vector<int> v = {1,5,4,2,3};    cout << (ob.maxValueAfterReverse(v)); }

ইনপুট

{1,5,4,2,3}

আউটপুট

10

  1. C++-এ STL ব্যবহার করে অ্যারে রিভার্স (Reverse) করা

  2. সি++ প্রোগ্রাম: অ্যারেতে সর্বনিম্ন মানের ফ্রিকোয়েন্সি (Frequency) নির্ণয়

  3. C++ STL-এ Array::crbegin() এবং Array::crend()

  4. C++ STL ব্যবহার করে অ্যারের সব রিভার্স পারমুটেশন (All Reverse Permutations)