Mövcud Nömrə Kod Həllindən Neçə Nömrələr Kiçikdir

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Çiy kərpic Amazon Bloomberg
alqoritmlər Geyim kodlaşdırma Hashing müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 95

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.

Problem bəyanat

Bu problemdə bizə bir array. Bu massivin hər bir elementi üçün həmin elementdən kiçik elementlərin sayını tapmaq məcburiyyətindəyik.
yəni hər i üçün (0 <= i

misal

nums = [8,1,2,2,3]
[4,0,1,1,3]

Explanation:
Nums [0] = 8 üçün ondan daha kiçik dörd rəqəm var (1, 2, 2 və 3).
Nums üçün [1] = 1 ondan daha kiçik rəqəm yoxdur.
Nums [2] = 2 üçün ondan (1) daha kiçik bir rəqəm mövcuddur.
Nums [3] = 2 üçün ondan (1) daha kiçik bir rəqəm mövcuddur.
Nums [4] = 3 üçün ondan üç kiçik rəqəm mövcuddur (1, 2 və 2).

nums = [6,5,4,8]
[2,1,0,3]

Yanaşma (Brute Force)

Sadəcə hər element üçün soldan sağa döngə edə bilərik.
Hər bir element üçün cari saydan az olan elementlərin sayını tapacağıq.
Beləliklə, əsasən hər element üçün bir xarici döngə işlədirik və daxili dövrədə hər elementi cari dəyərdən az saymaq üçün bütün massivi keçəcəyik.

Mövcud Nömrə Kod Həllindən Neçə Nömrənin Kiçik olması üçün tətbiqetmə

C ++ Proqramı

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

vector<int> smallerNumbersThanCurrent(vector<int>& nums) 
{
    vector<int> ans;

    for(int i=0;i<nums.size();i++)
    {
        int val=nums.at(i),count=0;
        for(int j=0;j<nums.size();j++)
        {
            if(nums.at(j)<val)  count++;
        }
        ans.push_back(count);
    }

    return ans;
}

int main() 
{
    vector<int> nums{ 8 , 1, 2 , 2 , 3 }; 
    vector<int> ans=smallerNumbersThanCurrent(nums);
    
    for(auto val:ans) cout<<val<<" ";
    cout<<endl;
    
    return 0;  
}
4 0 1 1 3

Java Proqramı

import java.lang.*;

class Rextester
{  
    public static int[] smallerNumbersThanCurrent(int[] nums) 
    {
        int[]ans=new int[nums.length];

        for(int i=0;i<nums.length;i++)
        {
            int count=0;
            for(int j=0;j<nums.length;j++)
            {
                if(nums[i]>nums[j])   count++;
            }
            ans[i]=count;
        }

        return ans;
    }
    
    public static void main(String args[])
    {
       int[]nums={8,1,2,2,3};  
       int[]ans=smallerNumbersThanCurrent(nums);
        
       for(int num:ans)  
       {
           System.out.print(num+" ");
       }
        
    }
}
4 0 1 1 3

Mövcud Nömrə Kod Həllindən Neçə Nömrənin Kiçik olması üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (n ^ 2): Hər biri n uzunluqda işləyən iç içə döngədən istifadə edirik. Beləliklə zaman mürəkkəbliyi O (n ^ 2) olacaqdır.

Kosmik Mürəkkəblik 

O (1): Cavabı qaytarmaq üçün n uzunluğunda bir sıra istifadə etdik. Bunun yanında əlavə yaddaş istifadə etməmişik. Beləliklə kosmik mürəkkəblik sabitdir.

Yanaşma (optimallaşdırılmış)

Bildiyimiz kimi, massivdəki hər hansı bir elementdən kiçik say, həmin saydan-1-dən az və ya bərabər olan sayın sayına bərabərdir.
Kimi, massivdə
1 2 3 4 4 5
5-dən az sayların sayı 4-dən az və ya bərabər olan sayların sayıdır.
Beləliklə, verilmiş massivdə mövcud olan hər bir elementin sayını bir şəkildə saxlasaq, ondan neçə elementin olduğunu asanlıqla deyə bilərik.

Mövcud Nömrə Kod Həllindən Neçə Nömrələr KiçikdirPin

Beləliklə, 101 ölçülü bir sayma seriyası saxlayırıq. (Çünki sayı [0,100] arasında ola bilər)
sayma massivinin hər indeksi verilmiş massivdə i sayının baş verdiyini deyəcəm.

İndi bir mövqedəki bir saydan az və ya bərabər olan neçə ədədi bilmək üçün cəmi prefiksi tətbiq etməliyik.
Beləliklə, sayma massivində cəmi prefiksi tətbiq edəcəyik.

Sonra massivin hər bir i elementi üçün bu saydan az element sayı sayılacaqdır [i-1].

Beləliklə, bu yanaşmada ilk növbədə sayım massivimizi yaradacağıq.
Sonra onu prefiks cəminə çevirəcəyik.
Sonra hər bir giriş elementinin sayı üçün sayımız [num-1] olacaqdır.

Mövcud Nömrə Kod Həllindən Neçə Nömrənin Kiçik olması üçün tətbiqetmə

C ++ Proqramı

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

vector<int> smallerNumbersThanCurrent(vector<int>& nums) 
{
    int count[101];
    memset(count,0,sizeof(count));
    for(auto& i:nums)
    {
        count[i]++;
    }

    for(int i=1;i<=100;i++)
    {
        count[i]=count[i-1]+count[i];
    }

    vector<int> ans;

    for(int i=0;i<nums.size();i++)
    {
        if(nums[i]==0)    ans.push_back(0);
        else    ans.push_back(count[nums[i]-1]);
    }

    return ans;
}

int main() 
{
    vector<int> nums{ 8 , 1, 2 , 2 , 3 }; 
    vector<int> ans=smallerNumbersThanCurrent(nums);
    
    for(auto val:ans) cout<<val<<" ";
    cout<<endl;
    
    return 0;  
}
4 0 1 1 3

Java Proqramı

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

vector<int> smallerNumbersThanCurrent(vector<int>& nums) 
{
    int count[101];
    memset(count,0,sizeof(count));
    for(auto& i:nums)
    {
        count[i]++;
    }

    for(int i=1;i<=100;i++)
    {
        count[i]=count[i-1]+count[i];
    }

    vector<int> ans;

    for(int i=0;i<nums.size();i++)
    {
        if(nums[i]==0)    ans.push_back(0);
        else    ans.push_back(count[nums[i]-1]);
    }

    return ans;
}

int main() 
{
    vector<int> nums{ 8 , 1, 2 , 2 , 3 }; 
    vector<int> ans=smallerNumbersThanCurrent(nums);
    
    for(auto val:ans) cout<<val<<" ";
    cout<<endl;
    
    return 0;  
}
4 0 1 1 3

Mövcud Nömrə Kod Həllindən Neçə Nömrənin Kiçik olması üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (maks (n, 100)): Zamanın mürəkkəbliyi O (Maks (n, 100)) olacaqdır, burada n giriş massivinin ölçüsüdür və 100 götürülür, çünki 100 ölçülü əlavə sıra düzəldirik.

Kosmik Mürəkkəblik 

O (1): 100 ölçülü əlavə sayma sayını istifadə edirik, beləliklə kosmik mürəkkəblik sabitdir.

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