Различни соседни елементи во низа


Ниво на тешкотија Лесно
Често прашувано во Coursera ДЕ Шо Крстоносните IBM, Кулиза Нагаро Опера Соби OYO Zoho
Низа

Изјава за проблем

Да претпоставиме дека имаме број низа. Проблемот „Различни соседни елементи во низата“ бара да се утврди дали е можно да се добие низата во која се разликуваат сите соседни броеви или не со заменување на два соседни или соседни елементи во низата, ако е можно, па отпечати „ДА ”Друго печатење“ НЕ ”.

пример

arr[] = { 3,5,5,3,5}
YES

Во овој пример, можеме да добиеме низа од различни соседни броеви со замена на arr [2] и arr [3] како 5 и 2, соодветно.

Различни соседни елементи во низа

arr[] = {3 , 5,  3, 3 }
NO

Објаснување

Не можеме да ја добиеме посакуваната низа дури и откако ќе ги замениме вредностите.

Алгоритам за различни соседни елементи во низа

1. Declare a map.
2. Count and store the frequencies of each element of the array.
3. Set maxFreq to 0.
4. Get the maximum frequency of a number from the map.
5. Check if maxFreq is greater than the half-length of the array, means maxFreq >(n+1) / 2.
    1. If true, then print NO.
    2. Else print YES.

Објаснување

Ни е дадена цела низа. Од нас беше побарано да утврдиме дали ја добиваме низата во кои се можни посебните соседни елементи. Тоа значи дека ако таквата низа не е можна, тогаш отпечатете го НЕ друго печатење ДА. Сега, треба да провериме колку броеви треба да се сменат за да ја добиеме посакуваната низа. Треба да ја провериме појавата на секој елемент и исто така дека максималната појава не треба да биде поголема од половина од должината на низата. Ако должината на низата ќе биде дадена како 5. Ако елементот има 3 појави во низата. Тогаш ќе биде можно да се преуреди низата на првата, третата и петтата позиција. Така, би било можно да се добијат различни соседни елементи во низата.

Weе направиме е да прогласиме за мапа. Потоа ќе ја поминеме низата и ќе ја изброиме фреквенцијата на секој елемент. Истовремено складирајте ги сите фреквенции на секој елемент на мапата. Да претпоставиме дека имаме низа од 5 броја, во која два од нив се случиле двапати во низа, а друг број се случил еднаш. Значи, ќе ја зачуваме фреквенцијата на секој елемент од низата. По зачувување на сите фреквенции на елементот. Variableе ја поставиме променливата maxFreq на 0. Во која ќе го зачуваме максималниот број на фреквенција на некој елемент, откако ќе ја дознаеме максималната фреквенција.

За тоа, ние ќе ја поминуваме картата и ќе провериме за секој елемент, дали имаме поголема фреквенција од претходно зачуваната фреквенција. Со ова, ќе го имаме максималниот број како фреквенција и ќе провериме дали таа фреквенција е поголема од половина од должината на низата. Ако е точно, тогаш отпечатете НЕ, инаку отпечатете ДА.

Код

C ++ код за различни соседни елементи во низа проблем

#include<bits/stdc++.h>
using namespace std;
void areDistinctAdjacent(int a[], int n)
{
    unordered_map<int, int> MAP;
    for (int i = 0; i < n; ++i)
        MAP[a[i]]++;
    int maxFreq = 0;
    for (int i = 0; i < n; ++i)
        if (maxFreq < MAP[a[i]])
            maxFreq = MAP[a[i]];
    if (maxFreq > (n + 1) / 2)
        cout << "NO";
    else
        cout << "YES";
}
int main()
{
    int arr[] = { 3,5,5,3,5 };
    int n = sizeof(arr) / sizeof(arr[0]);
    areDistinctAdjacent(arr, n);
    return 0;
}

 

YES

Java код за различни соседни елементи во низа проблем

import java.util.HashMap;
import java.util.Map;

class adjacentDistinctElement
{
    static void areDistinctAdjacent(int a[], int n)
    {
        HashMap<Integer,Integer> MAP = new HashMap<Integer,Integer>();

        for (int i = 0; i < n; ++i)
        {
            if(MAP.containsKey(a[i]))
            {
                int x = MAP.get(a[i]) + 1;
                MAP.put(a[i],x);
            }
            else
            {
                MAP.put(a[i],1);
            }

        }
        int maxFreq = 0;

        for (int i = 0; i < n; ++i)
            if (maxFreq < MAP.get(a[i]))
                maxFreq = MAP.get(a[i]);

        if (maxFreq > (n + 1) / 2)
        {
            System.out.println("NO");
        }
        else
        {
            System.out.println("YES");
        }
    }
    public static void main (String[] args)
    {
        int arr[] = { 3,5,5,3,5 };
        int n = arr.length;
        areDistinctAdjacent(arr, n);
    }
}

YES

Анализа на сложеност

Временска комплексност

Тој) каде „Н“ е бројот на елементи во низата. Бидејќи користевме Hashmap, ние сме во состојба да постигнеме линеарна сложеност во времето.

Комплексноста на просторот

Тој) каде „Н“ е бројот на елементи во низата. Како што користевме хашмап, зачувувавме фреквенции на елементи. И во најлош случај може да има сите различни елементи. Тогаш ќе имаме N парови со клучни вредности. Значи, имаме комплексност на просторот О (Н).