কম্পিউটার

C++ এ একক বিপরীতের পরে সর্বাধিক সংলগ্ন পরম মান যোগফল খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে বলা হয় সংখ্যা এবং আমরা তালিকার যেকোনো সাবলিস্টকে একবারে উল্টাতে পারি। এই ক্রিয়াকলাপটি সম্পাদন করার পরে, আমাদের

-এর সর্বাধিক সম্ভাব্য মান খুঁজে বের করতে হবে

$\displaystyle\sum\limits_{i=0}^{n-2}| সংখ্যা[i+1]-[সংখ্যা[i]|$

সুতরাং, ইনপুট যদি nums =[2, 4, 6] এর মত হয়, তাহলে আউটপুট হবে 6, যেমন আমরা যখন [4, 6] বিপরীত করব তখন আমরা [2, 6, 4] হিসাবে তালিকা পাব এবং মান | 2 − 6| + |6 − 4| =6

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • যদি সংখ্যার আকার <=1 হয়, তাহলে −

    • রিটার্ন 0

  • উত্তর :=0

  • n :=সংখ্যার আকার

  • আরম্ভ করার জন্য i :=1, যখন i

    • ans :=ans + |সংখ্যা[i] − nums[i − 1]|

  • orig :=ans

  • আরম্ভ করার জন্য i :=1, যখন i করুন

    • ans :=সর্বাধিক উত্তর এবং মূল − |(nums[i] − nums[i + 1]| + |nums[0] − nums[i + 1]|

    • ans :=সর্বাধিক উত্তর এবং মূল − |(nums[i] − nums[i − 1]| + |nums[n − 1] − nums[i − 1]|

  • pp :=−|সংখ্যা[1] − সংখ্যা[0]|

  • pm :=−|nums[1] − nums[0]|

  • mp :=−|সংখ্যা[1] − সংখ্যা[0]|

  • মিমি :=−|সংখ্যা[1] − সংখ্যা[0]|

  • j শুরু করার জন্য :=2, যখন j করুন

    • jerror :=|সংখ্যা[j + 1] − সংখ্যা[j]|

    • ans :=সর্বাধিক উত্তর এবং (orig + pp − jerror − nums[j] − nums[j + 1])

    • উত্তর :=সর্বাধিক উত্তর এবং (orig + pm − jerror − nums[j] + nums[j + 1])

    • উত্তর :=সর্বাধিক উত্তর এবং (orig + mp − jerror + nums[j] − nums[j + 1])

    • ans :=সর্বাধিক উত্তর এবং (orig + mm − jerror + nums[j] + nums[j + 1])

    • pp :=সর্বাধিক পিপি এবং −|সংখ্যা[j] − সংখ্যা[j − 1]|

    • pm :=সর্বাধিক pm এবং −|nums[j] − nums[j − 1]|

    • mp :=mp এর সর্বাধিক এবং −|nums[j] − nums[j − 1]|

    • মিমি :=সর্বাধিক মিমি এবং −|সংখ্যা[j] − সংখ্যা[j − 1]|

  • উত্তর ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>& nums) {
   if (nums.size() <= 1)
   return 0;
   int ans = 0;
   int n = nums.size();
   for (int i = 1; i < n; i++) {
      ans += abs(nums[i] − nums[i − 1]);
   }
   int orig = ans;
   for (int i = 1; i < n − 1; i++) {
      ans = max(ans, orig − abs(nums[i] − nums[i + 1]) +
      abs(nums[0] − nums[i + 1]));
      ans = max(ans, orig − abs(nums[i] − nums[i − 1]) + abs(nums[n
   − 1] − nums[i − 1]));
   }
   int pp = −abs(nums[1] − nums[0]) + nums[0] + nums[1];
   int pm = −abs(nums[1] − nums[0]) + nums[0] − nums[1];
   int mp = −abs(nums[1] − nums[0]) − nums[0] + nums[1];
   int mm = −abs(nums[1] − nums[0]) − nums[0] − nums[1];
   for (int j = 2; j < n − 1; j++) {
      int jerror = abs(nums[j + 1] − nums[j]);
      ans = max(ans, orig + pp − jerror − nums[j] − nums[j + 1]);
      ans = max(ans, orig + pm − jerror − nums[j] + nums[j + 1]);
      ans = max(ans, orig + mp − jerror + nums[j] − nums[j + 1]);
      ans = max(ans, orig + mm − jerror + nums[j] + nums[j + 1]);
      pp = max(pp, −abs(nums[j] − nums[j − 1]) + nums[j − 1] +
      nums[j]);
      pm = max(pm, −abs(nums[j] − nums[j − 1]) + nums[j − 1] −
      nums[j]);
      mp = max(mp, −abs(nums[j] − nums[j − 1]) − nums[j − 1] +
      nums[j]);
      mm = max(mm, −abs(nums[j] − nums[j − 1]) − nums[j − 1] −
      nums[j]);
   }
   return ans;
}
int main(){
   vector<int> v = {2, 4, 6};
   cout << solve(v);
}

ইনপুট

{2, 4, 6}

আউটপুট

6

  1. C++ এ বাইনারি ট্রিতে সর্বোচ্চ স্তরের যোগফল খুঁজুন

  2. নোড খুঁজুন যার পরম পার্থক্য X-এর সাথে C++ এ সর্বোচ্চ মান দেয়

  3. একটি অক্ষরের ASCII মান খুঁজে পেতে C++ প্রোগ্রাম

  4. পাইথনে একটি অপারেশনের পরে সর্বাধিক সাবয়ারের যোগফল খুঁজে বের করার প্রোগ্রাম