北京-益先科技-一面-笔试+技术面

  1. 笔试:具体要求和实现如下
import java.util.TreeSet;
public class SequenceManager {

/**
 * 设计一个序列管理器(SequenceManager)类,维护一个严格递增的正整数序列,提供如下操作:
 *
 * 获取下一个数(Integer getNext())
 * 功能:返回当前序列中缺失的最小正整数,并将该数添加到序列中
 * 返回值:新添加到序列中的正整数
 * 特性:保持序列严格递增
 *
 * 重命名操作(void rename(Integer oldNum, Integer newNum))
 * 功能:将序列中的一个数字替换为另一个数字
 * 参数:
 * oldNum:要替换的现有数字
 * newNum:替换后的新数字
 * 约束条件:
 * oldNum 必须存在于序列中
 * newNum 不能存在于序列中
 * 操作后序列仍保持严格递增
 *
 * 删除操作(void delete(Integer toDeleteNum))
 * 功能:从序列中移除指定的数字
 * 参数:要删除的数字
 * 约束条件:待删除的数字必须存在于序列中
 *
 * 序列特性:
 * 初始状态:空序列
 * 有序性:严格递增(即任意相邻两个数字之间不相等)
 * 元素唯一性:序列中不允许重复数字
 *
 * 操作示例:
 * 初始状态:序列为空 {}
 * getNext() → 返回1,序列变为 {1}
 * getNext() → 返回2,序列变为 {1, 2}
 * rename(2, 3) → 序列变为 {1, 3}
 * getNext() → 返回2,序列变为 {1, 2, 3}
 * getNext() → 返回4,序列变为 {1, 2, 3, 4}
 */

TreeSet<Integer> set = new TreeSet<>();

/**
 * 返回当前序列中缺失的最小正整数,并将该数添加到序列中
 *
 * @return 新添加到序列中的正整数
 */
public Integer getNext() {
    int excepted = 1;
    for (Integer num : set) {
        if (num > excepted) {
            break;
        }
        excepted = num + 1;
    }
    set.add(excepted);
    return excepted;
}

/**
 * 将序列中的一个数字替换为另一个数字
 *
 * @param oldNum 要替换的现有数字
 * @param newNum 替换后的新数字
 */
public void rename(Integer oldNum, Integer newNum) {
    if (!set.contains(oldNum)) {
        throw new RuntimeException("oldNum 不存在存在于序列中");
    }
    if (set.contains(newNum)) {
        throw new RuntimeException("newNum 存在存在于序列中");
    }
    set.remove(oldNum);
    set.add(newNum);
}

/**
 * 从序列中移除指定的数字
 *
 * @param toDeleteNum 要删除的数字
 */
public void delete(Integer toDeleteNum) {
    if (!set.contains(toDeleteNum)) {
        throw new RuntimeException("toDeleteNum 不存在存在于序列中");
    }
    set.remove(toDeleteNum);
}

@Override
public String toString() {
    return "SequenceManager{" +
            "set=" + set +
            '}';
}

public static void main(String[] args) {

    /*
     * 操作示例:
     * 初始状态:序列为空 {}
     * getNext() → 返回1,序列变为 {1}
     * getNext() → 返回2,序列变为 {1, 2}
     * rename(2, 3) → 序列变为 {1, 3}
     * getNext() → 返回2,序列变为 {1, 2, 3}
     * getNext() → 返回4,序列变为 {1, 2, 3, 4}
     */
    SequenceManager sequenceManager = new SequenceManager();

    System.out.println(sequenceManager.getNext() + ": " + sequenceManager);
    System.out.println(sequenceManager.getNext()+ ": " + sequenceManager);
    sequenceManager.rename(2,3);
    System.out.println(sequenceManager);
    System.out.println(sequenceManager.getNext()+ ": " + sequenceManager);
    System.out.println(sequenceManager.getNext()+ ": " + sequenceManager);
}

}

学习过程中是否使用AI开发过

#发面经攒人品#

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务