কম্পিউটার

C++ ব্যবহার করে সর্বোচ্চ ন্যূনতম ফর্মে একটি অ্যারে পুনরায় সাজান


আমরা একটি সাজানো অ্যারে দেওয়া হয়. আমাদের এই অ্যারেটিকে সর্বাধিক, সর্বনিম্ন আকারে সাজাতে হবে, অর্থাৎ, প্রথম উপাদানটি সর্বাধিক উপাদান, দ্বিতীয় উপাদানটি সর্বনিম্ন উপাদান, তৃতীয় উপাদানটি 2য় সর্বাধিক উপাদান, চতুর্থ উপাদানটি 2য় সর্বনিম্ন উপাদান, এবং আরও অনেক কিছু, উদাহরণস্বরূপ −

Input : arr[ ] = { 10, 20, 30, 40, 50, 60 }
Output : { 60, 10, 50, 20, 40, 30 }
Explanation : array is rearranged in the form { 1st max, 1st min, 2nd max, 2nd min, 3rd max, 3rd min }

Input : arr [ ] = { 15, 17, 19, 23, 36, 67, 69 }
Output : { 69, 15, 67, 17, 36, 19, 23 }

সর্বাধিক এবং সর্বনিম্ন ফর্ম −

-এ একটি বিন্যাস পুনর্বিন্যাস করার জন্য একক পদ্ধতি রয়েছে

সমাধান খোঁজার পদ্ধতি

সর্বাধিক এবং সর্বনিম্ন ফর্ম −

-এ একটি বিন্যাস পুনর্বিন্যাস করার জন্য একক পদ্ধতি রয়েছে

টু-পয়েন্টার অ্যাপ্রোচ

দুটি ভেরিয়েবল ব্যবহার করুন, ন্যূনতম এবং সর্বোচ্চ, এখানে যা সর্বোচ্চ এবং সর্বনিম্ন উপাদান নির্দেশ করবে এবং পুনরায় সাজানো অ্যারে সংরক্ষণ করতে একই আকারের একটি নতুন খালি অ্যারে তৈরি করবে। এখন অ্যারের উপর পুনরাবৃত্তি করুন, এবং যদি পুনরাবৃত্তিমূলক উপাদানটি জোড় সূচকে থাকে, তাহলে খালি অ্যারেতে arr[max] উপাদান যোগ করুন এবং সর্বোচ্চ 1 দ্বারা হ্রাস করুন। যদি উপাদানটি একটি বিজোড় সূচকে থাকে, তাহলে arr[min] উপাদান যোগ করুন খালি অ্যারে এবং মিনিমাম 1 দ্বারা বৃদ্ধি করুন। যতক্ষণ না সর্বোচ্চ মিনিটের থেকে ছোট হয়ে যায় ততক্ষণ পর্যন্ত এটি করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int main () {
   int arr[] = { 1, 2, 3, 4, 5, 6 };
   int n = sizeof (arr) / sizeof (arr[0]);
   // creating a new array to store the rearranged array.
   int final[n];
   // pointing variables to initial and final element index.
   int min = 0, max = n - 1;
   int count = 0;
   // iterating over the array until max is less than or equals to max.
   for (int i = 0; min <= max; i++) {
      // if count is even then store max index element

      if (count % 2 == 0) {
         final[i] = arr[max];
         max--;
      }
      // store min index element
      else {
         final[i] = arr[min];
         min++;
      }
      count++;
   }
   // printing the final rearranged array.
   for (int i = 0; i < n; i++)
      cout << final[ i ] << " ";
   return 0;
}

আউটপুট

6 1 5 2 4 3

উপরের কোডের ব্যাখ্যা

  • ভেরিয়েবলগুলি min=0 এবং max =array_length(n) - 1 হিসাবে শুরু করা হয়।
  • এর জন্য (int i =0; min <=max; i++) অ্যারেতে পুনরাবৃত্তি করার জন্য যতক্ষণ না সর্বোচ্চ মিনিটের চেয়ে বড় হয়ে যায়।
  • যদি গণনাটি বিজোড় হয়, তাহলে (সর্বোচ্চ) উপাদানটি চূড়ান্ত অ্যারেতে যোগ করা হয় এবং পরিবর্তনশীল সর্বোচ্চ 1 দ্বারা হ্রাস পায়।
  • ধরুন গণনা তখনও (মিনিট)। সেই ক্ষেত্রে, উপাদানটি চূড়ান্ত অ্যারেতে যোগ করা হয়, এবং ভেরিয়েবল মিন 1 দ্বারা বৃদ্ধি পায়।
  • অবশেষে, ফলাফলের অ্যারে চূড়ান্ত[ ] অ্যারেতে সংরক্ষিত হয়।

উপসংহার

এই নিবন্ধে, আমরা প্রদত্ত অ্যারেটিকে সর্বোচ্চ-মিনিট ফর্মে পুনর্বিন্যাস করার সমাধান নিয়ে আলোচনা করেছি। আমরা সমাধানের পদ্ধতি নিয়ে আলোচনা করেছি এবং সময়ের জটিলতা O(n) সহ একটি আশাবাদী সমাধান দিয়ে সমাধান করেছি। আমরা এর জন্য একটি C++ প্রোগ্রামও লিখি। একইভাবে, আমরা এই প্রোগ্রামটি অন্য যেকোনো ভাষায় লিখতে পারি যেমন সি, জাভা, পাইথন, ইত্যাদি। আমরা আশা করি আপনার এই নিবন্ধটি সহায়ক হবে।


  1. C++ এ পরম পার্থক্যের ন্যূনতম যোগফল সহ অ্যারে উপাদান?

  2. বাইনারি অনুসন্ধান পদ্ধতি ব্যবহার করে একটি অ্যারের ন্যূনতম উপাদান খুঁজে পেতে C++ প্রোগ্রাম

  3. বাইনারি অনুসন্ধান ব্যবহার করে একটি অ্যারেতে সর্বাধিক উপাদান খুঁজে পেতে C++ প্রোগ্রাম

  4. লিনিয়ার সার্চ ব্যবহার করে একটি অ্যারেতে ন্যূনতম উপাদান খুঁজে পেতে C++ প্রোগ্রাম