ከተፈቀደው ተጨማሪ ቦታ ጋር በቅደም ተከተል ለማጠናቀቅ ሁሉንም አሉታዊ አካላት ያንቀሳቅሱ


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ አቢይ አንድ Citrix IBM የ SAP ላብራቶሪዎች ታክሲ 4 ዋስትና ቴሊዮ
ሰልፍ

የችግሩ መግለጫ

በተፈቀደው ተጨማሪ ቦታ ቅደም ተከተል እንዲጠናቀቁ ሁሉንም አሉታዊ አካላት ያንቀሳቅሱ ”ሁለቱም አዎንታዊ እና አሉታዊ ቁጥሮችን የያዘ ድርድር ይሰጥዎታል ይላል። የችግሩ መግለጫ በመጨረሻው ድርድር ውስጥ ሁሉንም አሉታዊ አካላት ለማንቀሳቀስ ይጠይቃል።

ለምሳሌ

arr[] = { 1,2,-3,-5,2,7,-9,-11 }
1, 2, 2, 7, -3, -5, -9, -11
ማብራሪያ-ሁሉም አሉታዊ እሴቶች ወደ መጨረሻው ድርድር ተዛውረዋል ፡፡ እነሱም እንዲሁ በመነሻ ቅደም ተከተል ውስጥ ናቸው ፡፡

ከተፈቀደው ተጨማሪ ቦታ ጋር በቅደም ተከተል ለማጠናቀቅ ሁሉንም አሉታዊ አካላት ለማንቀሳቀስ ስልተ ቀመር

1. Declare an array same as the size of the original array.
2. Traverse the array and check if any number is greater than or equal to 0,
    1. If true then copy that number from the 0th position of the array we created.
3. Now traverse the array and check if any of the numbers is less than 0.
    1. If true, then copy that value to the array we created from the next position where the positive number ends.
4. Now copy that temporary array we created into the original array and print that array.

ማስረጃ

ተሰጠን ኢንቲጀር ሁለቱንም አሉታዊ እና አዎንታዊ ቁጥሮች የያዘ ድርድር። ሁሉንም አሉታዊ አካላት ወደ ድርድሩ / መጨረሻው ለማዛወር በሚያስችል ሁኔታ ድርድሩ እንደገና እንዲደራጅ ጠይቀናል። ከዚያ ለአዎንታዊ እና ለአሉታዊ አካላት ድርድርን በተናጠል እናልፋለን ፡፡ በመጀመሪያ ፣ ወደ ግራ መጎተት ያለብን በአዎንታዊ አካላት ላይ ክዋኔዎችን ማከናወን አለብን ፡፡ እና ከዚያ ሁሉንም አሉታዊ አካላት ወደ ቀኝ ያዛውሩ።

ከመጀመሪያው ድርድር ጋር ተመሳሳይ መጠን ያለው ተጨማሪ ድርድር መፍጠር አለብን። ምክንያቱም በዚህ ውስጥ የተፈለገውን የቁጥሮች አደረጃጀት እናከማቸዋለን ፡፡ ተለዋዋጭ ኢንዴክስን በማንሳት እና እንደ መጀመሪያ ለማስጀመር 0. ይህ ተለዋዋጭ በአዎንታዊ እና በአሉታዊ አካላት መካከል ለመለየት ይረዳናል። አሁን አንድ ድርድር ፈጠርን ፡፡ ከመጀመሪያው ድርድር እስከ ጊዜያዊ ድርድር ድረስ ያሉትን አዎንታዊ ቁጥሮች እናደርጋለን።

የድርድሩ አባሎች ከ 0 የሚበልጡ ወይም የሚበልጡ ከሆነ በምንጓዝበት ጊዜ እንፈትሻለን ፣ ከዚያ ያንን ንጥረ ነገር ከጊዚያዊ ድርድር መነሻ ቦታ ላይ ብቻ ወደ ጊዜያዊ ድርድር ይቅዱ። እንዲሁም የመረጃ ጠቋሚ እሴትን በአንድ ጊዜ እየጨመርን ነው ፣ ስለሆነም ለመጨረሻ ጊዜ አዎንታዊውን ንጥረ ነገር የምንገለብጠው ስለሆነ የሚቀመጥበት ከሚቀጥለው ንጥረ ነገር ጋር የእሴት መረጃ ጠቋሚ አለን ፣ በዚህ እገዛ በመጨረሻ ሁሉንም አሉታዊ አካላት እንገፋፋቸዋለን ፡፡

አሁን ድርድርን እንደገና ለማለፍ እና እያንዳንዱ ንጥረ ነገሮች ዜሮ ከሆነ ከ 0 በታች ከሆነ ለመፈተሽ እንሄዳለን ከዚያም ያንን ከተቆምንበት የመረጃ ጠቋሚ እሴት ወደ ጊዜያዊው ድርድር መግፋት ይጀምሩ ፡፡ በመጨረሻ ያንን ድርድር ወደ መጀመሪያው ድርድር ይቅዱት ከዚያ ያትሙት ወይም በቀላሉ ጊዜያዊ ድርድርን ማተም ሁለቱም ተመሳሳይ ነገሮች ናቸው። እና የሚፈለገውን ውጤት እናገኛለን ፡፡

ከተፈቀደው ተጨማሪ ቦታ ጋር በቅደም ተከተል ለማጠናቀቅ ሁሉንም አሉታዊ አካላት ያንቀሳቅሱ

ኮድ

ከተፈቀደው ተጨማሪ ቦታ ጋር በቅደም ተከተል እንዲጠናቀቁ ሁሉንም አሉታዊ አካላት ለማንቀሳቀስ የ C ++ ኮድ

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

void segregateElements(int arr[], int n)
{
    int temp[n];

    int j = 0;

    for (int i = 0; i < n ; i++)
        if (arr[i] >= 0 )
            temp[j++] = arr[i];

    if (j == n || j == 0)
        return;

    for (int i = 0 ; i < n ; i++)
        if (arr[i] < 0)
            temp[j++] = arr[i];

    memcpy(arr, temp, sizeof(temp));
}

void printArray(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
    int n = sizeof(arr)/sizeof(arr[0]);

    segregateElements(arr, n);
    printArray(arr,n);

    return 0;
}
1 2 2 7 -3 -5 -9 -11

ከተፈቀደው ተጨማሪ ቦታ ጋር በቅደም ተከተል እንዲጠናቀቁ ሁሉንም አሉታዊ አካላት ለማንቀሳቀስ የጃቫ ኮድ

import java.util.Arrays;

class moveNegativeElement
{
    public static void segregateElements(int arr[], int n)
    {
        int temp[] = new int[n];

        int j = 0;

        for (int i = 0; i < n; i++)
            if (arr[i] >= 0)
                temp[j++] = arr[i];

        if (j == n || j == 0)
            return;

        for (int i = 0; i < n; i++)
            if (arr[i] < 0)
                temp[j++] = arr[i];

        for (int i = 0; i < n; i++)
            arr[i] = temp[i];
    }
    public static void printArray(int arr[], int n)
    {
        for (int i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
    }
    public static void main(String arg[])
    {
        int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
        int n = arr.length;

        segregateElements(arr, n);
        printArray(arr,n);

    }
}
1 2 2 7 -3 -5 -9 -11

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (ኤን) የት "N" በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ናቸው። መስመራዊ የጊዜ ውስብስብነትን ባገኘነው ምክንያት ድርድርን በቀላሉ አልፈናል ፡፡

የቦታ ውስብስብነት

ኦ (ኤን) የት "N" በድርድሩ ውስጥ ያሉት ንጥረ ነገሮች ናቸው። ንጥረ ነገሮችን በተፈለገው ሁኔታ ባከማቸን ጊዜያዊ አጠቃቀም ተጨማሪ ድርድር ፈጥረናል ፡፡