Дизайн парақ жүйесі үшін шешім  


Күрделілік дәрежесі оңай
Жиі кіреді Amazon
алгоритмдер кодтау жобалау сұхбат сұхбат дайындау LeetCode LeetCodeSolutions

Проблемалық мәлімдеме  

Бұл мәселеде біз автотұрақты жобалауымыз керек. Бізде 3 түрлі тұрақ орындары бар (үлкен, орта және кіші). Барлық осы автотұрақтарда бастапқыда бос орындардың белгілі бір саны бар.
Үлкен кеңістікте біз ең көп дегенде b машиналарын орналастыра аламыз. Шағын кеңістікте біз ең көп дегенде s автомобильдерді, ал орташа кеңістікте m автомобильдерді орналастыра аламыз.

Бізге берілген сыныптың конструкторындағы b, s және m мәндері (барлық үш кеңістіктің максималды шегі) берілген. Енді біз осы жерлерге бірнеше машиналар орналастыруымыз керек. Автокөліктер де үш түрлі үлкенді-кішілі. Оларды тек өздерінің автотұрақтарына орналастыруға болады. Кішкентай автокөлік сияқты шағын тұраққа да орналастыруға болады.

Біз бұл машиналарды орналастыра аламыз ба, жоқ па, соны анықтауымыз керек. Ол үшін біз addCar (int type) функциясын құруымыз керек, егер ол осы типтегі автомобильді орналастыруға болатын болса немесе ол жалған болып шықпаса, ол шындыққа айналады.

Дизайн парақ жүйесі үшін шешімтүйреуіш

мысал

["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
[[1, 1, 0], [1], [2], [3], [1]]
[null, true, true, false, false]

Түсіндіру:

1. parkingSystem.addCar (1); // үлкен мәнге арналған 1 слот болғандықтан шындықты қайтарыңыз
2. parkingSystem.addCar (2); // true қайтарыңыз, өйткені орташа автомобильге арналған 1 слот бар
3. parkingSystem.addCar (3); // жалғанға қайтарыңыз, себебі кішкентай автокөлікке арналған слот жоқ
4. parkingSystem.addCar (1); // үлкен көліктің қол жетімді ұясы болмағандықтан, false мәнін қайтарыңыз. Ол қазірдің өзінде басып алынған.

Сондай-ақ, қараңыз
Ең ұзақ дұрыс кронштейннің кейінгі нәтижелері бойынша сұраулар

жақындау  

Біз мұнда екі тапсырма орындауымыз керек. Оның бірі - берілген мәндерді пайдалану құрылысшы. Тағы біреуі - addCar () функциясын құру.
Енді бізде үлкен автотұрақтың бос кеңістігі болса және осы жерге үлкен көлік орналастыру керек болса, ойланыңыз. Жай, біз бұл машинаны орналастырамыз және бос кеңістігіміз b-1-ге дейін төмендейді.
Егер бізде үлкен машиналар үшін бос орындар болмаса ше? яғни b = 0 болғанда біз үлкен машинаны орналастыра алмаймыз.

Біздің көзқарасымыз да солай. Әр автотұрақтың бос орындарының санын көрсету үшін біз берілген класта үш үлкен айнымалылар құрдық (үлкен, кіші және орта болсын). Біз олардың мәндерін конструкторда берілген мәндермен инициализациялаймыз.
Енді біз addCar () сұранысын өңдей аламыз.

CarType типті көлік келген сайын, біз тиісті автотұрақтағы орындардың санын тексереміз. Егер бос орын саны 0 болса, біз бұл машинаны орналастыра алмаймыз. Сондықтан біз өтірік қайтарамыз. Басқа жағдайда біз бұл машинаны орналастырамыз және осы типтегі кеңістіктің санын 1-ге азайтамыз және шындыққа ораламыз.

Іске асыру  

Автотұрақ жүйесін жобалауға арналған C ++ бағдарламасы Leetcode Solution

#include<iostream>
using namespace std;

class ParkingSystem {
public:
    
    int big,medium,small;
    ParkingSystem(int big1, int medium1, int small1)
    {
        big=big1;
        medium=medium1;
        small=small1;
    }
    
    bool addCar(int carType)
    {
        if(carType==1){
            if(big==0)return false;
            big--;
        }else if(carType==2){
            if(medium==0)return false;
            medium--;
            
        }else{
            if(small==0)return false;
            small--;
            
        }
        return true;
    }
};


int main()
{
        ParkingSystem obj = ParkingSystem(1,1,0);
        obj.addCar(1)?cout<<"true ":cout<<"false ";
        obj.addCar(2)?cout<<"true ":cout<<"false ";
        obj.addCar(3)?cout<<"true ":cout<<"false ";
        obj.addCar(1)?cout<<"true ":cout<<"false ";
        
        return 0;
}
true true false false

Паркинг жүйесін жобалауға арналған Java бағдарламасы

import java.util.*;
import java.lang.*;

class ParkingSystem {
    int big,medium,small;
    public ParkingSystem(int big, int medium, int small) 
    {
        this.big=big;
        this.medium=medium;
        this.small=small;
    }
    
    public boolean addCar(int carType) 
    {
        if(carType==1){
            if(big==0)return false;
            big--;
        }else if(carType==2){
            if(medium==0)return false;
            medium--;
            
        }else{
            if(small==0)return false;
            small--;
            
        }
        return true;
    }
}


class Solution
{  
    public static void main(String args[])
    {
        ParkingSystem obj=new ParkingSystem(1,1,0);
        System.out.print(obj.addCar(1)+" ");
        System.out.print(obj.addCar(2)+" ");
        System.out.print(obj.addCar(3)+" ");
        System.out.print(obj.addCar(1)+" ");
    }
}
true true false false

Автотұрақ жүйесін жобалаудың күрделілігін талдау  

Уақыттың күрделілігі

O (1): Алгоритмде қарапайым, егер басқа есептер болса. Сонымен уақыттың күрделілігі O (1) болады.

Сондай-ақ, қараңыз
Екілік матрицада 1 болатын ең жақын ұяшықтың арақашықтығы

Ғарыштың күрделілігі 

O (1): қосымша орын пайдаланылмайды.

1