天天看点

【LeetCode - 379】电话目录管理系统1、题目描述2、解题思路3、解题代码

文章目录

  • 1、题目描述
  • 2、解题思路
  • 3、解题代码

1、题目描述

【LeetCode - 379】电话目录管理系统1、题目描述2、解题思路3、解题代码

2、解题思路

  题目的构造器是输入一个 int 类型数字,则电话号码指的是:0、1、…、n-1 这些数字。

  定义一个布尔类型的数组 phone[],容量为电话号码数量,这个数组的索引就是电话号码,值为 true 表示可未被使用,值为 false 表示已被使用;

  1、get: 遍历 phone[],返回第一个值为 true 的索引;

  2、check:先 phone[i] = false,再返回 phone[i];

  3、release:phone[i] = true。

3、解题代码

class PhoneDirectory {

    /** Initialize your data structure here
        @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
    private boolean[] phone;   
    private int size;   

    public PhoneDirectory(int maxNumbers) {
        this.size = maxNumbers;
        phone = new boolean[maxNumbers];
        Arrays.fill(phone, true); // true 表示可以使用
    }

    /**
     * 分配给用户一个未被使用的电话号码,获取失败请返回 -1.
     */
    public int get() {
        for (int i = 0; i < size; i++) {
            if (phone[i]) {
                phone[i] = false;
                return i;
            }
        }
        return -1;
    }

    /**
     * 检查指定的电话号码是否被使用.
     */
    public boolean check(int number) {
        return phone[number];
    }

    /**
     * 释放掉一个电话号码,使其能够重新被分配.
     */
    public void release(int number) {
        phone[number] = true;
    }
}

/**
 * Your PhoneDirectory object will be instantiated and called as such:
 * PhoneDirectory obj = new PhoneDirectory(maxNumbers);
 * int param_1 = obj.get();
 * boolean param_2 = obj.check(number);
 * obj.release(number);
 */