379. Design Phone Directory

LeetCode medium оригинал: C# #array #csharp #design #leetcode #medium

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

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

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

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

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

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

Пример:

Input

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

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

Output

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

C# решение

сопоставлено/оригинал
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++ решение

auto-draft, проверить перед отправкой
#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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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 решение

сопоставлено/оригинал
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

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

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

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

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

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.