查看: 3351| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 停 车 场 分 享

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
/*OOD停车场,当时没做出来;回家自己写了一下,分享给大家!欢迎来“喷(分享)“。
为了便于理解,我就用个example的input/output来表达。希望能帮到大家。

Problem:
Design a 停车场 system。

Example:
input [1,1,1] - 停车场 小/中/大 型车 车位数。
input ["come","mini","leave","mini","come","big","come","big"] - 来了一个小车,走了一个小车,来了一个大车,又来了一个大车。
output ["1","2","no slot"] - 打印小票:小车来给小票1,大车来给小票2,又来大车没位置了给小票no slot。

My Solution:
1 HashMap<String, Integer> to carry the parking capacity.
1 HashMap<String, Integer> to track the parking status.
*/

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class parkingsystem {

    public static List<String> ticket(int[] parkingLot, String[][] cars) {
        HashMap<String, Integer> capacity = new HashMap<>(); // carry the parking max capacity
        capacity.put("mini", parkingLot[0]);
        capacity.put("med", parkingLot[1]);
        capacity.put("big", parkingLot[2]);

        List<String> ans = new ArrayList<>();
        int ticket = 0;
        HashMap<String, Integer> tracking = new HashMap<>(); // tracking the parking status
        for (String[] str : cars) {
            if (str[0] .equals("come")) {
                int cnt = tracking.getOrDefault(str[1], 0);
                if (cnt >= capacity.get(str[1])) {
                    ans.add("no slot"); // 停车没位置了打印小票 no slot...
                } else {
                    tracking.put(str[1], cnt + 1);
                    ans.add(String.valueOf(++ticket)); // 停车成功打印小票 1,2,3...
                }
            } else {                                        // 车离场,不打印小票,停车位tracking相应-1
                int cnt = tracking.get(str[1]);
                tracking.put(str[1], cnt - 1);
            }
        }
        return ans;
    }

    public static void main(String[] args) {
        int[] parkingLot = {1,1,1};
        String[][] cars = {
                {"come","mini"},
                {"leave","mini"},
                {"come","big"},
                {"come","big"}
        };
        System.out.println(ticket(parkingLot, cars));
        // 输出: [1, 2, no slot]
        // 小车来给小票1,大车来给小票2,又来大车没位置了给小票no slot
    }
}



评分

参与人数 3大米 +12 收起 理由
marshallzh + 1 欢迎来一亩三分地论坛!
smile765 + 1 赞一个!
14417335 + 10 给你点个赞!

查看全部评分


上一篇:新手刷题一些个人总结-大龄转码old yong
下一篇:面试中遇到的一道题目-找出所有可能产生的alias
🔗
dfcmichael 2022-4-17 15:38:13 | 只看该作者
全局:
本帖最后由 dfcmichael 于 2022-4-17 00:55 编辑

谢谢分享。不知道example是不是题的一部分。开个脑洞: 小车能不能停大车的车位,能的话因为leave需要记录到每车了。设计的话感觉每种车的系统可以是个object。我不太熟悉这类题,不知道怎么能加分,仅随便分享想法哈。
  1. class ParkingSystem {
  2.     enum carType;
  3.     int capacity;
  4.     int count;
  5.     func: bool parkAttempt();
  6.     func: void leave()
  7. }
  8. map<carType, ParkingSystem>
复制代码

评分

参与人数 1大米 +3 收起 理由
admin + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| shy1515shy 2022-4-18 00:19:07 来自APP | 只看该作者
全局:
dfcmichael 发表于 2022-04-17 00:38:13
谢谢分享。不知道example是不是题的一部分。开个脑洞: 小车能不能停大车的车位,能的话因为leave需要记录到每车了。设计的话感觉每种车的系统可以是个object。我不太熟悉这类题,不知道怎么能加
你的脑洞是对的,面试时要沟通这种情况的,我是要求每种车只停自己相应的位置。
我也是ood很懵,得找些视频学习一下,希望下次遇到能做出来。
回复

使用道具 举报

全局:
如果这是OOD可能需要你定义不同的interface class 用用enum之类的 你这样的答案可能有点走偏了
回复

使用道具 举报

全局:
还是讲class level design之间的关系吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表