Массивди 'arr [j]' 'i' болуп турган абалда кайра жайгаштырыңыз, эгер 'arr [i]' 'j' болсо


Кыйынчылык деңгээли жеңил
Көп суралган Amazon Delhivery Кулиза Нагарро опера Times Internet Yatra
согуштук тизме

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

Маселе ”Массивди '' [[]] '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' = '' '' '' '' "N" бүтүн сандарды камтыган көлөмдүү массив. Массивдеги сандар 0ден n-1ге чейин. Маселе билдирүүсү массивди [i] = j массиви [j] = i болуп кала тургандай кылып кайрадан жайгаштырууну суранат.

мисал

arr[]={1,3,5,2,0,4}
4 0 3 1 5 2

түшүндүрүү

arr [0] = 1 arr [1] = 0 болуп өзгөрүлдү

arr [1] = 3 arr [3] = 1 болуп өзгөрүлдү

arr [2] = 5 arr [5] = 2 болуп өзгөрүлдү

arr [3] = 2 arr [2] = 3 болуп өзгөрүлдү

arr [4] = 0 arr [0] = 4 болуп өзгөрүлдү

arr [5] = 4 arr [4] = 5 болуп өзгөрүлдү

ошентип басылып чыкканда ⇒

arr [0] ⇒ arr [1] ⇒ arr [2] ⇒ arr [3] ⇒ arr [4] ⇒ arr [5]

4 0 3 1 5 2

Массивди 'Алгоритм' '[[]]' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '

1. Traverse the array from 0 to n-1(inclusively).
    1. Do arr [ arr % n ] + = i * n.
2. Then update the value of arr[ i ] =arr[ i ] / n.
3. Print the array.

түшүндүрүү

Берилген согуштук тизме of бүтүн. Анын ээлеген сандары 0ден n - 1ге чейин. Биз pf массивин кайрадан жайгаштырабыз. Эгерде массивдеги элементтер arr [i] = j болсо, arr [j] = i болуп калат. Демек, эгерде бизде ith позициясында кандайдыр бир j мааниси бар болсо, анда ал мааниди массивдин j абалына өзгөртүңүз. Ошондой эле, 0ден n-1ге чейинки массив элементтерин бердик. Демек, сан массивдин узундугунан ашпашы керек. Ошентип, массивди аралаганда пайдалуу болушу мүмкүн, ар кандай сан маанисин индекс катары кабыл алып, ал боюнча айрым операцияларды жасай алабыз.

Себеби, биз массивдин өзүнө айрым операцияларды жасайбыз. Ар бир массив элементтерин тандап, табабыз модулу arr [i]% n, мында n - массивдин узундугу. Эми, жогоруда айткандай, сандар 0дон n-1ге чейин. Ошентип, n менен каалаган сандын модулун билгенде. Ал массивдин индексинен чоң сандан ашпайт, анткени arr [i]% n модулу кайрадан массивдин индекси катары каралат. Анан биз аны i * n көбөйтүүсүндө сактайбыз. Ар бир модулдун маанисин массивдин индекси катары жаңыртып, өзү менен жыйынтыктагыла.

Массивдеги баалуулуктарды алып келсе, аларды сактоо жана жаңыртуу үчүн гана жасап жатабыз. Биз аларды бөлүшүбүз керек. Себеби санды х менен көбөйтүп, х менен бөлсөңүз, ал кандай болсо, ал нейтралдуу болуп калат. Arr [i] ди бирдей arr [i] n ге бөлүп жаңыртып, arr [i] кылып сактаңыз. Ошентип, биз каалаган натыйжаны алабыз. Массивди 'arr [j]' болсо 'i' болуп калса, анда 'arr [i]' 'j' болуп турганда ушундайча жайгаштырууга болот.

Массивди 'arr [j]' 'i' болуп турган абалда кайра жайгаштырыңыз, эгер 'arr [i]' 'j' болсо

коду

C ++ коду массивди '' [[]] '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''шшшшшшшш "

#include<iostream>

using namespace std;

void rearrangeIndexValue(int arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[arr[i] % n] += i * n;
    }

    for (int i = 0; i < n; i++)
    {
        arr[i] /= n;
    }
}
void printArray(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}
int main()
{
    int arr[] = { 1,3,5,2,0,4};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "Array after modifying :";
    rearrangeIndexValue(arr,n);
    printArray(arr, n);

    return 0;
}
Array after modifying :4 0 3 1 5 2

"Arr [j] '' i" болуп турган массивди кайра жайгаштырган Java коду, эгер 'arr [i]' 'j' болсо

class rearrangeArray2
{
    public static void rearrangeIndexValue(int arr[], int n)
    {
        for (int i = 0; i < n; i++)
        {
            arr[arr[i] % n] += i * n;
        }
        for (int i = 0; i < n; i++)
        {
            arr[i] /= n;
        }
    }
    public static void printArray(int arr[], int n)
    {
        for (int i = 0; i < n; i++)
        {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
    public static void main(String[] args)
    {
        int arr[] = { 1,3,5,2,0,4};
        int n = arr.length;

        rearrangeIndexValue(arr, n);

        System.out.print("Array after modifying : ");
        printArray(arr, n);
    }
}
Array after modifying : 4 0 3 1 5 2

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

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

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

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

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