Fərqli elementləri olan subarrayslar

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Cisco Pulsuz yükləmə Times İnternet Zoho
Geyim Sükut HashingBaxılıb 44

Problem bəyanat

“Fərqli elementləri olan subarrayslar” sizə bir tam element elementi verildiyini bildirir. Problem ifadəsi bütün elementləri bir-birindən fərqli olan bitişik alt dizilərin uzunluqlarının cəmini tapmağı xahiş edir.

misal

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

İzahat: Alt massivlər ⇒ (3, 1, 2), (3, 1), (1, 2), (2,1), (3), (1), (2), (1)

Bütün elementlərin ümumi uzunluğu (3 + 2 + 2 + 2 + 1 + 1 + 1 + 1) = 10-dur.

Fərqli elementləri olan subarrayslarPin

arr[] = {3, 5, 8, 9}
20

İzahat: Alt dizilər ⇒ (3), (5), (8), (9), (3, 5), (5, 8), (8, 9), (3, 5, 8), (5, 8, 9), (3, 5, 8, 9)

Bütün elementlərin ümumi uzunluğu (1 + 1 + 1 + 1 + 2 + 2 + 2 +3 +3 +4) = 10-dur.

Fərqli elementləri olan Subarraysları tapmaq alqoritmi

1. Declare a map.
2. Set output and j to 0.
3. Traverse the array from i=0 to i<n(length of an array).
  1. While j is less than n and if a set doesn’t contain the value of arr[j].
    1. Insert all the values of arr [j].
  2. Update the output to output +=((j - i) * (j - i + 1))/2.
  3. Remove the arr[i] from Set.
4. Return output.

Izahat

Biz verdik tam array. Bizim vəzifəmiz bütün uzunluqların cəmini tapmaqdır alt massivlər bitişik və yalnız fərqli elementlərə sahib olanlar. Biz istifadə edəcəyik Set. Dəst, kopyalanan və ya ümumi elementlərin bir Dəstdən silinməsini təmin edir. J-i 0-a, çıxışı 0-a qoyun.

Dizini keçərək başlayın və a döngə zamanı. J-nin dəyərini 0-a və içərisinə qoyun döngə zamanı j artırarkən döngəni keçəcəyik. Bunun üzərinə bəzi şərtlər qoyun, j j n-dən azdır, yəni massivin uzunluğu və Dəstin arr [j] dəyərini ehtiva etdiyi aşkar olunarsa. Bir nümunəni nəzərdən keçirək:

Arr [] = {3, 1, 2, 1}

Hər elementi bir dəfəyə toplayan massivi gəzəcəyik, fərz edək ki, ilk dəfə 3 seçəcəyik, arr [j] -də, fikir xarici dövrəni bir müddət sabit saxlamaqdır bu 3 başlayacaq döngə zamanı, j 0 olaraq başlatıldığından və set ilk dəfə 3-dən ibarət olmadığından a-ya daxil olacaq döngə zamanı və arr [j] 3 deməkdir və j ++ artırın, növbəti elementi 1 olaraq seçəcək, Set ehtiva etmir, buna görə bir dəstə daxil ediləcək, sonra 2 gəlir və sonra 1 gəlir, lakin bu dəfə 1 artıq döngədə olduğu üçün çıxacaq döngə zamanı.

İndi döngədən çıxdıqda artan j dəyərimiz var, buna görə çıxışı buna uyğun olaraq yeniləyəcəyik. Və daha çox keçid üçün serialın elementini çıxarmalıyıq ki, alt sıradakı fərqli elementlərin cəminin mümkün uzunluğunu öyrənək. Və nəhayət, bu nəticəni qaytaracağıq.

Kodu

Fərqli elementləri olan subrarları tapmaq üçün C ++

#include<iostream>
#include<unordered_set>

using namespace std;

int getLength(int arr[], int n)
{
    unordered_set<int> SET;

    int j = 0, output = 0;
    for (int i=0; i<n; i++)
    {
        while (j < n && SET.find(arr[j]) == SET.end())
        {
            SET.insert(arr[j]);
            j++;
        }
        output += ((j - i) * (j - i + 1))/2;
        SET.erase(arr[i]);
    }
    return output;
}
int main()
{
    int arr[] = {3, 1, 2, 1};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << getLength(arr, n);
    return 0;
}
13

Fərqli elementləri olan subrarları tapmaq üçün Java kodu

import java.util.Set;
import java.util.HashSet;

class LengthOfDistinctElements
{
    public static int getLength(int[] arr, int n)
    {
        Set<Integer> SET = new HashSet<>();
        int j = 0, output = 0;
        for (int i = 0; i < n; i++)
        {
            while (j < n && !SET.contains(arr[j]))
            {
                SET.add(arr[j]);
                j++;
            }
            output += ((j - i) * (j - i + 1)) / 2;
            SET.remove(arr[i]);
        }
        return output;
    }
    public static void main(String[] args)
    {
        int[] arr = { 3, 1, 2,1  };
        int n = arr.length;
        System.out.println(getLength(arr, n));
    }
}
13

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

Dizini keçdik və HashSet istifadə edərək O (1) daxiletmə və digər bu kimi əməliyyatları həyata keçirməyə imkan verir. Beləliklə əldə edirik O (N) zaman mürəkkəbliyi harada "N" massivdəki elementlərin sayıdır.

Kosmik Mürəkkəblik

Yalnız N elementi saxladığımız üçün xətti kosmik mürəkkəbliyə nail olduq. O (N) hara "N" massivdəki elementlərin sayıdır

Translate »