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

C++-এ O(n) টাইম ও O(1) এক্সট্রা স্পেস দিয়ে ধনাত্মক ও ঋণাত্মক সংখ্যা রি-অ্যারেঞ্জ করুন


একটি পূর্ণসংখ্যার অ্যারে দেওয়া থাকলে, O(n) টাইম ও O(1) এক্সট্রা স্পেসে ধনাত্মক ও ঋণাত্মক সংখ্যা পরিবর্তনশীল পজিশনে আনার হবে। fazla এলিমেন্ট শেষে থাকবে।

উদাহরণ

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

আউটপুট − 2 -1 6 -1 4 -3

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

আউটপুট − 2 -2 3 -5 5 -3 5 -1 1 3 1 1

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

  • প্রথমে সব ঋণাত্মক সংখ্যা সামনে আনার জন্য temp = -1 থেকে শুরু করে swap(arr[++temp], arr[i]) করুন।

  • positive = temp+1, negative = 0।

  • while(positive < size && negative < positive && arr[negative] < 0) লুপে swap(arr[negative], arr[positive]) করুন।

  • positive++, negative += 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 += 2;
    }
}

int main(){
    int arr[] = {4, 2, -1, -1, 6, -3};
    int size = sizeof(arr)/sizeof(arr[0]);
    Rearrangement(arr, size);
    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. পাইথনে অ্যারে কনসিকিউটিভ (Consecutive) কিনা O(n) টাইম ও O(1) স্পেসে (নেগেটিভ সংখ্যাও হ্যান্ডেল)

  2. পাইথনে ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে পজিটিভ এবং নেগেটিভ নম্বর রিঅরেঞ্জ করুন

  3. পাইথন প্রোগ্রাম লিস্টে পজিটিভ ও নেগেটিভ সংখ্যা কাউন্ট করা

  4. পাইথনে ল্যাম্বডা এক্সপ্রেশন দিয়ে পজিটিভ এবং নেগেটিভ সংখ্যা পুনর্বিন্যাস