Кошумча орун берилгенде, бардык терс элементтерди аягына чейин жылдырыңыз


Кыйынчылык деңгээли жеңил
Көп суралган Capital One Citrix IBM SAP Labs Taxi4Sure Twilio
согуштук тизме

Маселени билдирүү

"Бардык терс элементтерди кошумча орун бошотуп, аягына чейин жылдырыңыз", сизге оң жана терс сандарды камтыган массив берилет. Маселе коюлушу массивдин акыркы бөлүгүндөгү бардык терс элементтерди жылдырууну суранат.

мисал

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

Бардык терс элементтерди жылдыруу үчүн Java коду, кошумча орун берилген

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

Комплекстик анализ

Убакыт татаалдыгы

O (N) кайда "N" массивдеги элементтер. Биз жөн гана массивди басып өттүк, ошонун эсебинен убакыттын сызыктуу татаалдыгына жетиштик.

Космостун татаалдыгы

O (N) кайда "N" массивдеги элементтер. Убактылуу колдонуу үчүн кошумча массив түздүк, анда элементтерди керектүү тартипте сактадык.