Üçüncü Maksimum Sayı Leetcode Həlli

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon Facebook google
alqoritmlər Geyim kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 37

Başlıqda deyildiyi kimi, məqsəd verilmiş üçüncü maksimum ədədi tapmaqdır array tam ədədi. Qeyd etməliyik ki fərqli massivdəki üçüncü maksimum tamsayı. Fərqli üçüncü maksimum ədədi olmadıqda massivdəki maksimum tam ədədi qaytarırıq.

misal

Array = {1 , 3 , 2 , -2 , -4 , -9}
1

Izahat

Birinci maksimum 3, ikinci maksimum 2, üçüncü maksimum 1-dir. Beləliklə, 1-i çap edirik.

Array = {1 , 1 , 3}
3

Izahat

Birinci maksimum 3, ikinci maksimum 1, ancaq var No. üçüncü maksimum, çünki hər ikisini də burada ikinci maksimum hesab edirik.

Yanaşma (çeşidləmə)

Bütün massivi çeşidləyə və tapa bilərik üçüncü fərqli ondan başlayaraq tam ədəd geri. Diqqət yetirin ki, massivdə təkrarlanan giriş ola biləcəyi üçün Array [N - 3] -i qaytara bilmərik. Əgər tapmasaq 3 massivdəki fərqli tam ədədlər, son elementini maksimum element olduğu üçün qaytarırıq. Daha yaxşı başa düşmək üçün verilən alqoritmi izləyin.

Üçüncü Maksimum Sayı Leetcode HəlliPin

Alqoritm

  1. Bir funksiya yaradın thirdMax () tələb olunan tam ədədi qaytararaq
  2. thirdMax () müəyyən bir sıra içərisində üçüncü fərqli maksimum ədədi qaytarır - a
  3. Dizini sıralayın
  4. Dəyişəni başladın, idx massivin son indeksini saxlamaq və fərqliSayım fərqli elementləri arxadan saymaq
  5. isə idx> = 0:
    • Artım fərqliSayım
    • Initialize [idx] ilə eyni dəyərə malik olan indekslərdən təkrarlamaq
    • əvvəl elementləri isə idx bir [idx] və ilə eyni dəyərə sahibdirlər i> = 0:
      • Azalma i
    • If i == -1, demək ki, bütün massivi keçdik
      • Bir [n - 1], maksimum elementi qaytarın, çünki massivdə 3 üç fərqli element yox idi
    • Atayın idx = i maksimum tam ədədin növbəti dəstinə keçmək
    • If fərqliSayım 2-yə bərabərdir,
      • bu, mövcud elementdən (a [idx]) daha 2 elementi yoxladığımız deməkdir
      • Cari elementi qaytarın, bir [idx]
  6.  Funksiya sintaksisinə görə -1-ə qayıdın.
  7. Nəticəni çap edin

Üçüncü Maksimum Sayı Leetcode həllinin tətbiqi

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;

int thirdMax(vector <int> &a)
{
    int n = a.size();
    sort(a.begin() , a.end());

    int idx = n - 1 , i , distinctCount = 0;

    while(idx >= 0)
    {
        distinctCount++;
        i = idx - 1;
        //to check all the values with same value as a[idx]
        while(i >= 0 && a[i] == a[idx])
            i--;

        //no third distinct element
        if(i == -1)
            return a[n - 1];
        idx = i;

        //found 2 bigger elements before?
        if(distinctCount == 2)
            return a[idx];
    }
    return -1;
}

int main()
{
    vector <int> a = {1 , 3 , 2 , -2 , -4 , -9};
    cout << thirdMax(a) << '\n';
}

Java Proqramı

import java.util.Arrays;

class third_max
{
    public static void main(String args[])
    {
        int[] a = {1 , 3 , 2 , -2 , -4 , -9};
        System.out.println(thirdMax(a));
    }

    static int thirdMax(int[] a)
    {
        int n = a.length;
        Arrays.sort(a);

        int idx = n - 1 , i , distinctCount = 0;

        while(idx >= 0)
        {
            distinctCount++;
            i = idx - 1;
            //to check all the values with same value as a[idx]
            while(i >= 0 && a[i] == a[idx])
                i--;

            //no third distinct element
            if(i == -1)
                return a[n - 1];
            idx = i;

            //found 2 bigger elements before?
            if(distinctCount == 2)
                return a[idx];
        }
        return -1;
    }
}
1

Üçüncü Maksimum Sayı Leetcode Çözümünün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (NlogN), N = massivin ölçüsü, bütün serialı sıraladığımız üçün.

Kosmik mürəkkəblik

O (1) yalnız daimi yaddaş məkanından istifadə etdiyimiz üçün.

Yanaşma (Optimal)

Buradakı optimal yanaşma ilk, ikinci və üçüncü maksimum tam ədədi massivdə saxlayacaq yalnız üç dəyərin qorunmasıdır. Ancaq bəzi əsas vəziyyətlər var, çünki hər zaman fərqli elementləri maksimum hesab etməliyik. Bu məqsədlə, təyin etmək istifadə edilə bilər ki, hər zaman təkrarlanan elementlərdən qurtula bilək. Dizini təkrarlaya və ölçüsünü qoruya bilərik təyin etmək hər təkrarlamadan sonra 3 kimi. Hər hansı bir əlavə edildikdən sonra 3-dən çox element ehtiva edərsə, içərisindəki ən az elementi çıxarırıq ki, içərisində üçü olsun fərqli ən böyük sonunda elementlər. Ölçüsü sonunda 3-dən azdırsa, maksimum dəyərini qaytarırıq.

Alqoritm

  1. Yenə eyni funksiyanı istifadə edirik thirdMax () problemimizi həll etmək
  2. Maksimum tam ədədi saxlamaq üçün bir dəsti başladın.
  3. Hər biri üçün element massivdə:
    • Dəstə əlavə edin
    • Dəstin ölçüsü 3-ü keçərsə
      • Dəstdəki ən az elementi sil / sil
  4. Dəstin ölçüsü 3-ə bərabərdirsə
    • ondan ən kiçik elementi qaytarın
  5. Daha
    • içindəki maksimum elementi qaytarın
  6. Nəticəni çap edin

Üçüncü Maksimum Sayı Leetcode həllinin tətbiqi

C ++ Proqramı

#include <bits/stdc++.h>
using namespace std;

int thirdMax(vector <int> &a)
{
    set <int> maxElements;
    for(int &element : a)
    {
        maxElements.insert(element);
        if(maxElements.size() > 3)
            maxElements.erase(*maxElements.begin());
    }
    if(maxElements.size() == 3)
        return *maxElements.begin();

    return *prev(maxElements.end());
}

int main()
{
    vector <int> a = {1 , 3 , 2 , -2 , -4 , -9};
    cout << thirdMax(a) << '\n';
}

Java Proqramı

import java.util.*;

class third_max
{
    public static void main(String args[])
    {
        int[] a = {1 , 3 , 2 , -2 , -4 , -9};
        System.out.println(thirdMax(a));
    }

    static int thirdMax(int[] a)
    {
        Set <Integer> maxElements = new HashSet <>();
        for(int element : a)
        {
            maxElements.add(element);
            if(maxElements.size() > 3)
                maxElements.remove(Collections.min(maxElements));
        }

        if(maxElements.size() == 3)
            return Collections.min(maxElements);
        return Collections.max(maxElements);
    }
}
1

Üçüncü Maksimum Sayı Leetcode Çözümünün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (N) massivi tək keçiddə təkrarladığımız üçün. Setdəki elementlərin silinməsi və yerləşdirilməsi daimi vaxt tələb edir, çünki hər təkrarlamadan sonra içərisində ən çox 3 element saxlayırıq. Burada, N = massivin ölçüsü.

Kosmik mürəkkəblik

O (1) yalnız daimi yaddaş məkanından istifadə etdiyimiz üçün.

Şərh yaz

Translate »
1