কম্পিউটার

O(n) সময়ে ধনাত্মক এবং ঋণাত্মক সংখ্যা এবং C++ এ O(1) অতিরিক্ত স্থান পুনর্বিন্যাস করুন


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

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

ইনপুট − int arr[] ={4, 2, -1, -1, 6, -3}

আউটপুট − O(n) সময় এবং O(1) অতিরিক্ত স্থানে ধনাত্মক এবং ঋণাত্মক সংখ্যার পুনর্বিন্যাস হল:2 - 1 6 -1 4 -3

ব্যাখ্যা − আমাদের ধনাত্মক এবং নেতিবাচক উভয় উপাদান সমন্বিত আকার 6 এর একটি পূর্ণসংখ্যা অ্যারে দেওয়া হয়েছে। এখন, আমরা অ্যারেটিকে এমনভাবে সাজাব যাতে সমস্ত ধনাত্মক উপাদান এবং নেতিবাচক উপাদানগুলি একটি বিকল্প অবস্থানে থাকে এবং সমস্ত অতিরিক্ত উপাদানগুলি একটি অ্যারের শেষে যোগ করা হবে অর্থাৎ 2 -1 6 -1 4 -3 হবে চূড়ান্ত ফলাফল

ইনপুট − int arr[] ={-1, -2, -3, 1, 2, 3, 5, 5, -5, 3, 1, 1}

আউটপুট − O(n) সময় এবং O(1) অতিরিক্ত স্থানে ধনাত্মক এবং ঋণাত্মক সংখ্যার পুনর্বিন্যাস হল:2 - 2 3 -5 5 -3 5 -1 1 3 1 1

ব্যাখ্যা − আমাদেরকে 12 আকারের একটি পূর্ণসংখ্যা অ্যারে দেওয়া হয়েছে যাতে ইতিবাচক এবং নেতিবাচক উভয় উপাদান রয়েছে। এখন, আমরা অ্যারেটিকে এমনভাবে সাজাব যাতে সমস্ত ধনাত্মক উপাদান এবং নেতিবাচক উপাদানগুলি একটি বিকল্প অবস্থানে থাকে এবং সমস্ত অতিরিক্ত উপাদানগুলি একটি অ্যারের শেষে যোগ করা হবে যেমন 2 -2 3 -5 5 -3 5 -1 1 3 1 1 চূড়ান্ত ফলাফল হবে

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • পূর্ণসংখ্যা ধরনের উপাদানগুলির একটি অ্যারে ইনপুট করুন এবং একটি অ্যারের আকার গণনা করুন৷

  • FOR লুপ ব্যবহার করে পুনর্বিন্যাস ক্রিয়া সম্পাদন করার আগে একটি অ্যারে প্রিন্ট করুন৷

  • প্যারামিটার হিসাবে অ্যারের অ্যারে এবং সাইজ পাস করে ফাংশন পুনর্বিন্যাস (আর, আকার) এ কল করুন।

  • ফাংশনের ভিতরে পুনর্বিন্যাস (আর, আকার)

    • অস্থায়ী পূর্ণসংখ্যা টাইপ ভেরিয়েবল ঘোষণা করুন যেমন temp থেকে -1, টেম্প + 1 থেকে ধনাত্মক এবং 0 থেকে ঋণাত্মক।

    • i থেকে 0 পর্যন্ত লুপ শুরু করুন যতক্ষণ না i একটি অ্যারের আকারের চেয়ে কম হয়। লুপের ভিতরে, IF arr[i] 0-এর কম চেক করুন তারপর টেম্পকে 1 দ্বারা বৃদ্ধি করুন এবং C++ STL-এর অন্তর্নির্মিত পদ্ধতিতে কল করুন যেমন swap(arr[temp], arr[i]) এবং পাস করুন arr[temp] এবং arr[i ] একটি প্যারামিটার হিসাবে।

    • স্টার্ট লুপ যখন একটি অ্যারের আকারের চেয়ে কম পজিটিভ এবং ধনাত্মক এবং arr[নেতিবাচক] 0 এর চেয়ে কম। লুপের ভিতরে, একটি প্যারামিটার হিসাবে arr[ঋণাত্মক] এবং arr[ধনাত্মক] পাস করে কল অদলবদল করুন। ধনাত্মককে 1 দ্বারা বৃদ্ধি করুন এবং ঋণাত্মক + 2-এ সেট করুন।

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   int temp = -1;
   for(int i = 0; i < size; i++){
      if (arr[i] < 0){
         temp++;
         swap(arr[temp], arr[i]);
      }
   }
   int positive = temp + 1;
   int negative = 0;
   while(positive < size && negative < positive && arr[negative] < 0){
      swap(arr[negative], arr[positive]);
      positive++;
      negative = negative + 2;
   }
}
int main(){
   int arr[] = {4, 2, -1, -1, 6, -3};
   int size = sizeof(arr)/sizeof(arr[0]);
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"Rearrangement of positive and negative numbers in O(n) time and O(1) extra space is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rearrangement of positive and negative numbers in O(n) time and O(1) extra space is: 2 -1 6 -1 4 -3

  1. পাইথনে অ্যারের উপাদানগুলি O(n) সময় এবং O(1) স্থান (ধনাত্মক এবং ঋণাত্মক উভয় সংখ্যাই পরিচালনা করে) পরপর আছে কিনা তা পরীক্ষা করুন

  2. ধনাত্মক এবং ঋণাত্মক সংখ্যা পুনর্বিন্যাস করতে পাইথন প্রোগ্রামে ল্যাম্বডা এক্সপ্রেশন

  3. পাইথন প্রোগ্রামে একটি তালিকায় ইতিবাচক এবং নেতিবাচক সংখ্যা গণনা করুন

  4. ধনাত্মক এবং ঋণাত্মক সংখ্যা পুনর্বিন্যাস করতে পাইথনে ল্যাম্বডা এক্সপ্রেশন