379. Design Phone Directory

LeetCode medium original: C# #array #csharp #design #leetcode #medium
Il testo del problema è tradotto dal russo per la lingua selezionata. Il codice resta invariato.

Создайте телефонный справочник, который изначально имеет maxNumbers пустых слотов для хранения номеров. Справочник должен хранить номера, проверять, пуст ли определенный слот, и освобождать данный слот.

Реализуйте класс PhoneDirectory:

PhoneDirectory(int maxNumbers) Инициализирует телефонный справочник с количеством доступных слотов maxNumbers.

int get() Предоставляет номер, который никому не назначен. returns -1, если номера недоступны.

bool check(int number) returns true, если слот доступен, и false в противном случае.

void release(int number) Перераспределяет или освобождает номер слота.

Esempio:

Input

["PhoneDirectory", "get", "get", "check", "get", "check", "release", "check"]

[[3], [], [], [2], [], [2], [2], [2]]

Output

[null, 0, 1, true, 2, false, null, true]

C# soluzione

abbinato/originale
using System;
public class PhoneDirectory {
    private bool[] isSlotAvailable;
    public PhoneDirectory(int maxNumbers) {
        isSlotAvailable = new bool[maxNumbers];
        for (int i = 0; i < maxNumbers; i++) {
            isSlotAvailable[i] = true;
        }
    }
    public int Get() {
        for (int i = 0; i < isSlotAvailable.Length; i++) {
            if (isSlotAvailable[i]) {
                isSlotAvailable[i] = false;
                return i;
            }
        }
        return -1;
    }
    public bool Check(int number) {
        return isSlotAvailable[number];
    }
    public void Release(int number) {
        isSlotAvailable[number] = true;
    }
}

C++ soluzione

bozza automatica, rivedere prima dell'invio
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public class PhoneDirectory {
    private bool[] isSlotAvailable;
    public PhoneDirectory(int maxNumbers) {
        isSlotAvailable = new bool[maxNumbers];
        for (int i = 0; i < maxNumbers; i++) {
            isSlotAvailable[i] = true;
        }
    }
    public int Get() {
        for (int i = 0; i < isSlotAvailable.size(); i++) {
            if (isSlotAvailable[i]) {
                isSlotAvailable[i] = false;
                return i;
            }
        }
        return -1;
    }
    public bool Check(int number) {
        return isSlotAvailable[number];
    }
    public void Release(int number) {
        isSlotAvailable[number] = true;
    }
}

Java soluzione

abbinato/originale
public class PhoneDirectory {
    private boolean[] isSlotAvailable;

    public PhoneDirectory(int maxNumbers) {
        isSlotAvailable = new boolean[maxNumbers];
        for (int i = 0; i < maxNumbers; i++) {
            isSlotAvailable[i] = true;
        }
    }

    public int get() {
        for (int i = 0; i < isSlotAvailable.length; i++) {
            if (isSlotAvailable[i]) {
                isSlotAvailable[i] = false;
                return i;
            }
        }
        return -1;
    }

    public boolean check(int number) {
        return isSlotAvailable[number];
    }

    public void release(int number) {
        isSlotAvailable[number] = true;
    }
}

JavaScript soluzione

abbinato/originale
class PhoneDirectory {
    constructor(maxNumbers) {
        this.isSlotAvailable = new Array(maxNumbers).fill(true);
    }

    get() {
        for (let i = 0; i < this.isSlotAvailable.length; i++) {
            if (this.isSlotAvailable[i]) {
                this.isSlotAvailable[i] = false;
                return i;
            }
        }
        return -1;
    }

    check(number) {
        return this.isSlotAvailable[number];
    }

    release(number) {
        this.isSlotAvailable[number] = true;
    }
}

Python soluzione

abbinato/originale
class PhoneDirectory:
    def __init__(self, maxNumbers):
        self.is_slot_available = [True] * maxNumbers

    def get(self):
        index = next((i for i, available in enumerate(self.is_slot_available) if available), -1)
        if index != -1:
            self.is_slot_available[index] = False
        return index

    def check(self, number):
        return self.is_slot_available[number]

    def release(self, number):
        self.is_slot_available[number] = True

Go soluzione

abbinato/originale
package main

type PhoneDirectory struct {
    isSlotAvailable []bool
}

func Constructor(maxNumbers int) PhoneDirectory {
    isSlotAvailable := make([]bool, maxNumbers)
    for i := range isSlotAvailable {
        isSlotAvailable[i] = true
    }
    return PhoneDirectory{isSlotAvailable}
}

func (this *PhoneDirectory) Get() int {
    for i, available := range this.isSlotAvailable {
        if available {
            this.isSlotAvailable[i] = false
            return i
        }
    }
    return -1
}

func (this *PhoneDirectory) Check(number int) bool {
    return this.isSlotAvailable[number]
}

func (this *PhoneDirectory) Release(number int) {
    this.isSlotAvailable[number] = true
}

Algorithm

Инициализировать array isSlotAvailable размером maxNumbers, установив значение true во всех индексах.

Метод get(): Проходить по arrayу isSlotAvailable. Если найдется true на каком-либо индексе, установить isSlotAvailable[i] = false и вернуть i. Если доступных слотов нет, вернуть -1.

Метод check(number): Вернуть значение isSlotAvailable[number].

Метод release(number): Установить isSlotAvailable[number] = true.

😎

Vacancies for this task

offerte attive with overlapping task tags are mostrati.

Tutte le offerte
Non ci sono ancora offerte attive.