379. Design Phone Directory

LeetCode medium original: C# #array #csharp #design #leetcode #medium
Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

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

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

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

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

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

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

Beispiel:

Input

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

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

Output

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

C# Lösung

zugeordnet/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++ Lösung

Auto-Entwurf, vor dem Einreichen prüfen
#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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 Lösung

zugeordnet/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.

😎

Stellen zu dieser Aufgabe

aktive Stellen with overlapping task tags are angezeigt.

Alle Stellen
Es gibt noch keine aktiven Stellen.