Dizini düz yerləşdirin ki, hətta yerləşdirilib

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon LinkedIn OYO Otaqları Times İnternet Zoho
Geyim Yenidən təşkil edin çeşidləyiciBaxılıb 69

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

Tutaq ki, tam ədədi var. Məsələ “Cütlüyün təkdən çox olmasına görə yenidən düzəldin” məsələsi, massivin yenidən düzəldilməsini xahiş edir, belə elementləri bir sıra içərisindəki cüt mövqedəki elementdən əvvəlki qədər olmalıdır.

Arr [i-1] <= Arr [i], 'i' mövqeyi təkdirsə.

Arr [i-1]> = Arr [i], 'i' mövqeyi bərabərdirsə.

misal

Arr[] = {1, 4, 5, 2, 7}
1 7 2 5 4

İzahat: Cüt yerlərdəki hər bir element əvvəlki mövqedəki elementlərdən daha böyükdür (yəni tək mövqelər).

Alqoritm

1. Traverse the array from 0 to n (length of the array).
    1. Check if the position is even or odd if it is even,
        2. If arr[i] is greater than the arr[i-1], then swap the array elements.
    2. Else, if arr[i] is smaller than the arr[i-1], then swap the array elements.
2. Print the array.

Izahat

Biz verdik tam massiv. Yenidən qurmağı xahiş etdik array elə bir şəkildə ki, bərabər mövqedəki elementlər ondan əvvəlki elementlərdən daha böyük olmalıdır. 0 əsaslı indeksləşdirməni nəzərdən keçirməyəcəyimizi unutmayın. Beləliklə, massivin ilk elementi tək vəziyyətdə olduğu kimi qəbul ediləcəkdir. İkincisi, hətta mövqedə olduğu kimi və s. Fikir serialı keçmək və massivin tək və cüt mövqeyini yoxlamaqdır. Daha əvvəl də qeyd edildiyi kimi, 0 əsaslı indeksləmə mövqeyi nəzərə alınmır. Beləliklə, ilk elementi 0-cı mövqedən götürərək tək mövqedə qəbul edəcəyik, çünki birinci mövqedə, 1 isə tək rəqəmdir. Daha rəsmi olaraq, bu sualda 1 əsaslı indeksləşdirməni izləyirik.

Nə edəcəyik, serialı 1-ci mövqedən keçməli və bu mövqenin bərabər olub olmadığını yoxlamalıyıq. Düzdürsə, bərabər yerləşdirilmiş elementin əvvəllər yerləşdirilmiş elementlərdən daha böyük olub olmadığını yoxlayacağıq. Doğrudursa, dəyərləri dəyişdirin. Element mövqelərinin tək olmadığını yoxlaya bilərik, bu da işləyə bilər. Və daha sonra bərabər mövqe elementinin yoxlanılması əvvəlcədən yerləşdiriləndən daha böyükdür.

Yalnız bir neçə şeyi xatırlamalıyıq, əgər cüt mövqedəki element cari elementin yerləşdirilməsindən bir qədər əvvəlki vəziyyətdə saxlanılan elementin dəyərindən çox deyilsə, onda bu dəyərləri dəyişdirməli və ya dəyişdirməliyik. Beləliklə, hətta yerləşdirilmiş elementlər əvvəlcədən yerləşdiriləndən daha böyük və ya sadəcə qəribə şəkildə yerləşdirilmiş elementdəki kimi sıraya gələ bilərlər. Nəhayət, mübadilənin edildiyi massivi çap edin.

Dizini düz yerləşdirin ki, hətta yerləşdirilibPin

Kodu

C ++ kodu sıra düzəldilmək üçün, hətta yerləşdirilmiş vəziyyətdə təkdən daha böyükdür

#include<iostream>

using namespace std;

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void rearrangeEvenPositioned(int arr[], int n)
{
    for (int i = 1; i < n; i++)
    {
        if (i % 2 == 0)
        {
            if (arr[i] > arr[i - 1])
                swap(&arr[i - 1], &arr[i]);
        }
        else
        {
            if (arr[i] < arr[i - 1])
                swap(&arr[i - 1], &arr[i]);
        }
    }
}

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

Dizini düz yerləşdirmək üçün Java kodu, hətta yerləşdirilmiş vəziyyətdə təkdən daha böyük olacaq

class rearrangeArray1
{
    public static void rearrangeEvenPositioned(int arr[], int n)
    {
        for (int i = 1; i < n; i++)
        {
            if (i % 2 == 0)
            {
                if (arr[i] > arr[i - 1])
                {
                    int temp=arr[i-1];
                    arr[i-1]=arr[i];
                    arr[i]=temp;
                }
            }
            else
            {
                if (arr[i] < arr[i - 1])
                {
                    int temp=arr[i-1];
                    arr[i-1]=arr[i];
                    arr[i]=temp;
                }
            }
        }
    }
    public static void main(String args[])
    {
        int arr[] = {1, 4, 5, 2, 7};
        int n = arr.length;
        rearrangeEvenPositioned(arr, n);
        for (int i = 0; i < n; i++)
            System.out.print(arr[i]+" ");

    }
}

1 5 2 7 4

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (N)  hara "N" massivdəki elementlərin sayıdır. Biz yalnız xətti zaman mürəkkəbliyində edilə bilən massivi keçdik.

Kosmik Mürəkkəblik

Alqoritm var O (1) kosmik mürəkkəblik. Bu alqoritm yerində bir yanaşmadır və buna görə daimi yer tələb edir. Lakin bütün proqram daxil olduğu üçün O (N) kosmik mürəkkəbliyə malikdir.

Crack Sistemi Dizayn Müsahibələri
Translate »