কম্পিউটার

C++ এ ট্রান্সফর্মড অ্যারে সাজান


ধরুন আমাদের কাছে পূর্ণসংখ্যার সংখ্যা এবং পূর্ণসংখ্যার মান a, b এবং c একটি সাজানো অ্যারে আছে। আমাদের অ্যারের প্রতিটি উপাদান x-এ f(x) =ax^2 + bx + c ফর্মের একটি দ্বিঘাত ফাংশন প্রয়োগ করতে হবে। এবং চূড়ান্ত অ্যারে অবশ্যই সাজানো ক্রমে হতে হবে।

সুতরাং, যদি ইনপুট হয় সংখ্যা =[-4,-2,2,4], a =1, b =3, c =5, তাহলে আউটপুট হবে [3,9,15,33]

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

  • ফাংশন সংজ্ঞায়িত করুন f(), যা x, a, b, c −

    নেয়
  • রিটার্ন ax^2 + bx + c

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

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

  • শুরু :=0, শেষ :=n - 1

  • n

    আকারের একটি অ্যারে রেট সংজ্ঞায়িত করুন
  • যদি a>=0 হয়, তাহলে −

    • আরম্ভ করার জন্য i :=n - 1, যখন i>=0, আপডেট করুন (i 1 দ্বারা কম করুন), করুন −

      • x :=f(সংখ্যা[শুরু], a, b, c)

      • y :=f(সংখ্যা[শেষ], a, b, c)

      • যদি x> y, তাহলে −

        • (শুরু 1 দ্বারা বৃদ্ধি করুন)

        • ret[i] :=x

      • অন্যথায়

        • ret[i] :=y

        • (শেষ 1 দ্বারা হ্রাস করুন)

  • অন্যথায়

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

      • x :=f(সংখ্যা[শুরু], a, b, c)

      • y :=f(সংখ্যা[শেষ], a, b, c)

      • যদি x

        • (শুরু 1 দ্বারা বৃদ্ধি করুন)

        • ret[i] :=x

      • অন্যথায়

        • ret[i] :=y

        • (শেষ 1 দ্বারা হ্রাস করুন)

  • রিটার্ন রিটার্ন

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   int f(int x, int a, int b, int c){
      return a * x * x + b * x + c;
   }
   vector<int< sortTransformedArray(vector<int<& nums, int a, int b, int c) {
      int n = nums.size();
      int start = 0;
      int end = n - 1;
      vector<int< ret(n);
      if (a >= 0) {
         for (int i = n - 1; i >= 0; i--) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x > y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      else {
         for (int i = 0; i < n; i++) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x < y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {-4,-2,2,4};
   print_vector(ob.sortTransformedArray(v, 1, 3, 5));
}

ইনপুট

{-4,-2,2,4}, 1, 3, 5

আউটপুট

[3, 9, 15, 33, ]

  1. একটি C++ ফাংশনে একটি 2D অ্যারে পাস করা

  2. গণনা সাজানোর জন্য C++ প্রোগ্রাম

  3. হিপ সর্ট অ্যালগরিদম ব্যবহার করে 10টি উপাদানের একটি অ্যারে সাজানোর জন্য C++ প্রোগ্রাম

  4. একটি C++ ফাংশনে একটি অ্যারে পাস করা