Ən Kiçik Element Dəqiq K dəfə Təkrarlandı

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Belzabar Komli Media Netskope Nvidia Opera XidmətNow UHG Optum
Geyim Sükut SimBaxılıb 111

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.

N ölçüsündə bir sıra A [] verilir. İçərisində tam k dəfə təkrarlanan ən kiçik elementi tapmalıyıq array.

misal

Input

A [] = {1, 2, 2, 5, 5, 2, 5}

K = 3

Buraxılış

K tezliyi olan ən kiçik element: 2

Yanaşma 1: Kobud güc

Əsas fikir

Dizidəki hər bir element üçün bütün massivi keçərək tezliyini tapa bilərik və tezliyi K-ya bərabərdirsə, əvvəlki cavabımızın və bu elementin minimumunu alacağıq. Sonda son cavabımızı yazdıracağıq.

Tam K dəfə təkrarlanan ən kiçik elementi tapmaq üçün alqoritm

  1. Dəyişən 'bayraq' işarəsini false ilə başlayın. Bayraq K tezliyində hər hansı bir element tapdığımızı bildirir.
  2. 0-dan n-1 aralığında I üçün bir döngə çalıştırın
    1. Dizidəki A [i] tezliyini sayacaq bir dəyişən sayını sıfır ilə başlayın.
    2. 0-dan n-1 aralığında j üçün bir döngə işlədin
      1. A [j] A [i] -ə bərabərdirsə, 1-ə qədər artırın.
    3. Sayı K-yə bərabərdirsə, ans = min (ans, A [i]) yeniləyin.
  3. Yoxlayın, bayraq doğrudursa, ans yazdırın, əks halda K tezlikli bir element olmadığını yazdırın.

Həyata keçirilməsi

C ++ proqramı

#include <bits/stdc++.h>
using namespace std;
void smallestElementRepeatedExactlyKTimes(vector<int> A, int K)
{
    int n = A.size();
    bool flag = false;
    int ans = 0;
    for (int i = 0; i < n; i++)
    {
        int count = 0;
        for (int j = 0; j < n; j++)
        {
            if (A[i] == A[j])
            {
                count++;
            }
        }
        if (count == K)
        {
            if (flag == false)
            {
                flag = true;
                ans = A[i];
            }
            else
            {
                ans = min(ans, A[i]);
            }
        }
    }
    if (flag == false)
    {
        cout << "There is no element with frequency K.";
    }
    else
    {
        cout << "Smallest element with frequency K is: " << ans;
    }
    return;
}
int main()
{
    vector<int> A = {1, 2, 2, 5, 5, 2, 5};
    int K = 3;
    smallestElementRepeatedExactlyKTimes(A, K);
    return 0;
}
Smallest element with frequency K is: 2

JAVA proqramı

public class Main
{
    static void smallestElementRepeatedExactlyKTimes(int A[],int K)
    {
        int n = A.length;
        boolean flag = false;
        int ans = 0;
        for (int i = 0; i < n; i++)
        {
            int count = 0;
            for (int j = 0; j < n; j++)
            {
                if (A[i] == A[j])
                {
                    count++;
                }
            }
            if (count == K)
            {
                if (flag == false)
                {
                    flag = true;
                    ans = A[i];
                }
                else
                {
                    ans = Math.min(ans, A[i]);
                }
            }
        }
        if (flag == false)
        {
            System.out.print("There is no element with frequency K.");
        }
        else
        {
            System.out.print("Smallest element with frequency K is: "+ ans);
        }
        return;
    }
  public static void main(String[] args) {
    int A[] = {1, 2, 2, 5, 5, 2, 5};
        int K = 3;
        smallestElementRepeatedExactlyKTimes(A, K);
  }
}
Smallest element with frequency K is: 2

Tam K dəfə təkrarlanan ən kiçik elementi tapmaq üçün mürəkkəblik analizi

Zaman mürəkkəbliyi

Hər ikisi də N ölçülü iki iç içə döngə istifadə edirik. Beləliklə, ümumi vaxt mürəkkəbliyi O (N ^ 2).

Kosmik mürəkkəblik

Daimi məkandan istifadə edirik. Yəni kosmik mürəkkəblikdir O (1).

Yanaşma 2: Hashing istifadə

Əsas fikir

Hər elementin tezliyini bir hash cədvəlində saxlaya bilərik.

Bundan sonra, tam olaraq K tezliyi olan ən kiçik elementi tapmaq üçün hash cədvəlindən keçə bilərik.

Tam K dəfə təkrarlanan ən kiçik elementi tapmaq üçün alqoritm

  1. Hər element bir hash cədvəlində olduqda tezliyi saxlayın.
  2. Dəyişən 'bayraq' işarəsini false ilə başlayın. Bayraq K tezliyində hər hansı bir element tapdığımızı bildirir.
  3. Qarışıq cədvəlini təkrarlayın və K tezliyi olan ən kiçik elementi tapın.
  4. Bayraq doğrudursa, ans yazdırın, əks halda K tezlikli bir element olmadığını yazdırın.

Nümunə ilə başa düş

A [] = {1, 2, 2, 5, 5, 2, 5}

K = 3

Bu sıra üçün hash cədvəli belə görünür:

Ən Kiçik Element Dəqiq K dəfə TəkrarlandıPin

Həyata keçirilməsi

C ++ proqramı

#include <bits/stdc++.h>
using namespace std;
void smallestElementRepeatedExactlyKTimes(vector<int> A, int K)
{
    int n = A.size();
    bool flag = false;
    int ans = 0;
    unordered_map<int, int> hash_table;
    for (int i = 0; i < n; i++)
    {
        hash_table[A[i]]++;
    }
    for (auto element : hash_table)
    {
        if (element.second == K)
        {
            if (flag == false)
            {
                flag = true;
                ans = element.first;
            }
            else
            {
                ans = min(ans, element.first);
            }
        }
    }
    if (flag == false)
    {
        cout << "There is no element with frequency K.";
    }
    else
    {
        cout << "Smallest element with frequency K is: " << ans;
    }
    return;
}
int main()
{
    vector<int> A = {1, 2, 2, 5, 5, 2, 5};
    int K = 3;
    smallestElementRepeatedExactlyKTimes(A, K);
    return 0;
}
Smallest element with frequency K is: 2

JAVA proqramı

import java.util.*; 
public class Main
{
    static void smallestElementRepeatedExactlyKTimes(int A[],int K)
    {
        int n = A.length;
        boolean flag = false;
        int ans = 0;
        HashMap<Integer, Integer> hash_table = new HashMap<Integer, Integer>(); 
        for (int i = 0; i < n; i ++) 
        {
            if (hash_table.containsKey(A[i])) 
            {
                hash_table.put(A[i], hash_table.get(A[i]) + 1); 
            }
            else{
                hash_table.put(A[i], 1);
            }
        }
        for(Map.Entry element: hash_table.entrySet())
        {
            if(((int)element.getValue()==K))
            {
                if(flag==false)
                {
                    flag=true;
                    ans=((int)(element.getKey()));
                }
                else{
                    ans=Math.min(ans,((int)(element.getKey())));
                }
            }
        }
        if (flag == false)
        {
            System.out.print("There is no element with frequency K.");
        }
        else
        {
            System.out.print("Smallest element with frequency K is: "+ ans);
        }
        return;
    }
  public static void main(String[] args) {
    int A[] = {1, 2, 2, 5, 5, 2, 5};
        int K = 3;
        smallestElementRepeatedExactlyKTimes(A, K);
  }
}
Smallest element with frequency K is: 2

Tam K dəfə təkrarlanan ən kiçik elementi tapmaq üçün mürəkkəblik analizi

Zaman mürəkkəbliyi

Dizini yalnız bir dəfə gəzirik, buna görə zamanın mürəkkəbliyi var O (N).

Kosmik mürəkkəblik

Məkanda mürəkkəblik olduğu üçün elementlərin tezliyini massivdə saxlamaq üçün bir hash masası saxlayırıq O (N).

References

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