Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • KnowledgePlanet
  • docdoc
  • Issue
  • #8

doc
doc
  • 项目概览

KnowledgePlanet / doc

通知 1303
Star 822
Fork 117
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 2
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
doc
doc
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 42
    • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
    • 合并请求 0
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 2
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板
已关闭
开放中
Opened 4月 11, 2023 by 小傅哥@Yao__Shun__Yu⛹Owner

房间预约设计

需求:

现在有这样一个场景。比如说有10间房间,我就拿其中的一间房间来说。比如说A号房间,有几个时间段被预约。2023-01-01到2023-01-08,2023-04-03到2023-04-12,2023-07-01到2023-08-24等等B号房间,有几个时间段被预约。2023-02-01到2023-02-08,2023-05-01到2023-05-03,2023-07-06到2023-07-24等等以此以此类推,预约时间段是不是固定的,这些预约时间段之间会有一些空白的时间片。然后这时候有几个人来预约房间。其中甲可能就是想在2023-05-04到2023-07-04,乙以的话想在2023年5月06号~5月9号进行预约房间。

这个时候的场景就是说乙的话在a房间,b房间都可以预约。如果他选择b房间的话,那么甲的话,就可能ab两个房间都不能预约了。如果说他选择的是a房间的话,那么甲的话可以预约b房间的,所以说现在就是要最大的满足,安排更多的人。可以预约时间。避免房间上的浪费, 而且上面所说的只是其中一个满足的条件。还有一个需要满足的条件是在于如果来了十个人在一个房间预约时间不冲动的情况下,尽量把人全部安排到一个房间上。然后才安排第二个房间。 这个场景不知道怎么实现。

import java.util.*;

class RoomBooking {
    private String room;
    private String start;
    private String end;

    public RoomBooking(String room, String start, String end) {
        this.room = room;
        this.start = start;
        this.end = end;
    }

    public String getRoom() {
        return room;
    }

    public String getStart() {
        return start;
    }

    public String getEnd() {
        return end;
    }
}

public class RoomBookingSystem {
    private Map<String, List<RoomBooking>> bookings;
    private Set<String> bookedRooms;

    public RoomBookingSystem() {
        bookings = new HashMap<>();
        bookedRooms = new HashSet<>();
    }

    public void addBooking(String room, String start, String end) {
        RoomBooking booking = new RoomBooking(room, start, end);
        if (!bookings.containsKey(room)) {
            bookings.put(room, new ArrayList<>());
        }
        bookings.get(room).add(booking);
    }

    public void bookRoom(String person, String start, String end) {
        Set<String> availableRooms = new HashSet<>();
        for (String room : bookings.keySet()) {
            if (!bookedRooms.contains(room)) {
                List<RoomBooking> roomBookings = bookings.get(room);
                boolean conflicts = false;
                for (RoomBooking booking : roomBookings) {
                    if (start.compareTo(booking.getEnd()) <= 0 && end.compareTo(booking.getStart()) >= 0) {
                        conflicts = true;
                        break;
                    }
                }
                if (!conflicts) {
                    availableRooms.add(room);
                }
            }
        }

        if (availableRooms.isEmpty()) {
            System.out.println(person + ":没有可用的房间!");
        } else {
            String chosenRoom = availableRooms.iterator().next();
            bookedRooms.add(chosenRoom);
            System.out.println(person + ":预约了 " + chosenRoom + " 房间!");
        }
    }

    public static void main(String[] args) {
        RoomBookingSystem system = new RoomBookingSystem();

        // 添加房间预约时间段
        system.addBooking("A", "2023-01-01", "2023-01-08");
        system.addBooking("A", "2023-04-03", "2023-04-12");
        system.addBooking("A", "2023-07-01", "2023-08-24");
        system.addBooking("B", "2023-02-01", "2023-02-08");
        system.addBooking("B", "2023-05-01", "2023-05-03");
        system.addBooking("B", "2023-07-06", "2023-07-24");

        // 预约房间
        system.bookRoom("甲", "2023-05-04", "2023-07-04");
        system.bookRoom("乙", "2023-05-06", "2023-05-09");
    }
}

使用了字典数据结构来记录房间的预约情况和人员的预约情况。通过遍历待安排人员的预约时间段,与已有的房间预约情况进行比较,找到符合条件的房间,并记录已经预约的房间,以避免重复预约。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: KnowledgePlanet/doc#8
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7