Масофаи минималии байни ду ададро ёбед  


Сатҳи душворӣ осон
Аксар вақт пурсида мешавад КупонДуния Coursera Деҳлӣ Озмоишгоҳҳои Moonfrog PayPal Пардохт Snapchat
тартиботи ҳарбӣ

Изҳороти мушкилот  

Шумо массив ва ду рақамро бо номи x ва y додед. Масъалаи "Масофаи минималии байни ду ададро ёбед" дархост мекунад, ки масофаи минималии имконпазири байни онҳоро муайян кунем. Массиви додашуда метавонад унсурҳои умумӣ дошта бошад. Шумо метавонед фикр кунед, ки ҳам x ва ҳам фарқ доранд.

мисол  

arr[] = {1, 3, 2, 5, 8, 2, 5, 1}

x = 2

y=8
1

Шарҳ: Нишондиҳандаҳои 2 2 ва 5 ва индекси 8 4 мебошанд, бинобар ин индексеро мегирем, ки масофаи минималии байни ду адади додашударо ҳисоб мекунад.

arr[] = {1, 3, 2, 5, 8, 2, 5, 1}

x = 3

y=5
2

Шарҳ: Индекси 3 ба 1 ва индекси 5 ба 3. Ҳамин тавр, масофаи минималӣ байни ҳардуи онҳо 3-1 = 2 мебошад.

arr[] = {2, 4, 6, 8, 2, 5, 0, 56}

x = 6

y=5
3

Шарҳ: Индекси 6 ба 2 ва индекси 5 ба 5 аст, аз ин рӯ масофаи минималӣ байни ҳардуи онҳо 5-2 = 3 мебошад.

Алгоритм барои ёфтани масофаи минималии байни ду адад  

1. Set flag to -1 and output to the Maximum value of an Integer.
2. Traverse the array from i = 0 to i < n.
    1. Check if the array element is either equal to x or equal to y.
    2. Check if flag is not equal to i and arr[i] is not equal to arr[flag].
        1. If the condition is true, then find out the minimum between the output and i - flag.
3. Return output.

Шарҳ

Мо додаем асал ададҳо ва ду адади бутун, ки х ва у ном доранд. Мо бояд масофаи ҳадди аққалро байни ду рақами додашуда, х ва y-ро муайян кунем. Барои фаҳмидани масофаи ҳадди аққал мо ду ҷуфти рақамҳоро месанҷем. Рақаме, ки ба мо дода мешавад, мо танҳо ҳангоми гузариш онҳоро тафтиш хоҳем кард. Мо яке аз ин ду рақамро ҷустуҷӯ хоҳем кард, бо унсури ҷории массив мувофиқат мекунад. Агар он дуруст ёбад, пас мо тафтиш мекунем, ки он унсури такроршаванда нест ё ҳамон як унсур. Агар ҳамаи шартҳо дуруст дониста шаванд, пас мо танҳо арзиши баромади худро навсозӣ мекунем.

ҳамчунин нигаред
Дархостҳо дар бораи эҳтимолияти шумораи ҷуфт ё тоқ дар қаторҳои додашуда

Ягон элементҳои массиви ҷорӣ ба x ё y баробаранд ва шарти дигари индексҳо ва ҳамон унсурҳо бардурӯғ шудаанд. Он гоҳ мо танҳо парчамро навсозӣ мекунем ва индекси унсури ҷориро ба парчам нигоҳ медорем. Биёед як мисолро дида бароем ва ба он нигарем:

мисол

Arr [] = {1, 3, 2, 5, 8, 2, 5, 1}, x = 2, y = 8

Натиҷа = Арзиши максималии бутун, парчам = - 1

Мо ду рақами x = 2 ва y = 8 додем

  • i = 0, мо месанҷем, ки arr [i] ба 2 ё arr [i] ба 8 баробар аст, аммо шарт қонеъ намешавад.

Ҳолат ҳангоми i = 2 қонеъ карда мешавад.

  • i = 2, arr [i] ба 2 баробар аст.

Мо парчамро тафтиш мекунем ва он дурӯғ аст, зеро парчам ҳанӯз -1 аст. Пас, ба он дохил намешавад, агар мо танҳо парчамро ҳамчун flag = 2 навсозӣ кунем.

  • Интихоби навбатӣ, вақте ки i = 4, arr [i] = 8, парчам ба -1 баробар нест ва инчунин arr [i] ба arr [flag] баробар нест. Мо ин ҳолатро месанҷем, то дигар рақамро пайдо накунем ва масофаи онро нагирем.

Ҳамин тавр, ҳоло мо натиҷаро ҳамчун = 4 - 2 = 2 навсозӣ мекунем. Ва инчунин flag = 4 навсозӣ мекунем

  • Боз ҳам дар i = 5, arr [i] = 2, мо шартро дуруст хоҳем ёфт, инчунин парчам ба -1 ва arr [i] ба arr [flag] баробар нестанд, бинобар ин натиҷаро дубора навсозӣ хоҳем кард ҳадди аққал байни дақ (4, 5-4) ва 1 дар натиҷа нав карда мешавад.

Ҳамин тавр, акнун мо масофаи ҳадди ақалро байни 1 унсури массиви arr [4] = 8 ва arr [5] = 2 дорем.

ҳамчунин нигаред
Маблағи ҳадди аққали зеркатраса ба k баробар аст

Натиҷа = 1.

Масофаи минималии байни ду ададро ёбедпайвандак

рамз  

Коди C ++ барои ёфтани масофаи минималӣ байни ду рақам

#include<bits/stdc++.h>

using namespace std;

int getMinimumDistance(int arr[], int n, int x, int y)
{
    int flag=-1;
    int output=INT_MAX;

    for(int i = 0 ; i < n ; i++)
    {
        if(arr[i] ==x || arr[i] == y)
        {
            if(flag != -1 && arr[i] != arr[flag])
            {
                output = min(output,i-flag);
            }

            flag=i;
        }
    }
    if(output==INT_MAX)
        return -1;

    return output;
}

int main()
{
    int arr[] = {1, 3, 2, 5, 8, 2, 5, 1};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 2;
    int y = 8;

    cout << "Minimum possible distance between " << x <<" and " << y << " : "<<getMinimumDistance(arr, n, x, y);
    return 0;
}
Minimum possible distance between 2 and 8 : 1

Рамзи Java барои ёфтани масофаи минималӣ байни ду рақам

class MinimumDistanceBwNumbers
{
    public static int getMinimumDistance(int arr[], int n, int x, int y)
    {
        int flag=-1;
        int output=Integer.MAX_VALUE;

        for(int i = 0 ; i < n ; i++)
        {
            if(arr[i] ==x || arr[i] == y)
            {
                if(flag != -1 && arr[i] != arr[flag])
                {
                    output = Math.min(output,i-flag);
                }

                flag=i;
            }
        }
        if(output==Integer.MAX_VALUE)
            return -1;

        return output;
    }
    public static void main(String[] args)
    {
        int arr[] = {1, 3, 2, 5, 8, 2, 5, 1};
        int n = arr.length;
        int x = 2;
        int y = 8;

        System.out.println("Minimum possible distance between " + x + " and " + y + ": " + getMinimumDistance(arr, n, x, y));
    }
}
Minimum possible distance between 2 and 8: 1

Таҳлили мураккабӣ  

Мураккабии вақт

Гузариши ягона алгоритмро дар мураккабии вақти хаттӣ иҷро мекунад. Эй (н) ки дар "Н" шумораи унсурҳои массив аст.

Мураккабии фазо

О (Н) мураккабии фазо, зеро мо массивро барои нигоҳ доштани вуруд истифода мебарем. Аммо алгоритми ёфтани масофаи ҳадди ақалл фазои иловагии O (1) талаб мекунад.