379. Design Phone Directory

LeetCode medium original: C# #array #csharp #design #leetcode #medium
Task text is translated from Russian for the selected interface language. Code is left unchanged.

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

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

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

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

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

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

Example:

Input

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

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

Output

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

C# solution

matched/original
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++ solution

auto-draft, review before submit
#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 solution

matched/original
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 solution

matched/original
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 solution

matched/original
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 solution

matched/original
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

Active vacancies with overlapping task tags are shown.

All vacancies
There are no active vacancies yet.