379. Design Phone Directory

LeetCode medium original: C# #array #csharp #design #leetcode #medium
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

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

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

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

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

bool check(int number) returns 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++ 해법

자동 초안, 제출 전 검토
#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.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.