LeetCode库存配单算法题Python实现优化及难度咨询
问题难度判定
这道题属于LeetCode Easy 难度,核心考点是基础循环、字典操作和条件判断,不需要用到复杂算法或特殊数据结构,属于编程入门阶段的基础练习题。
现有代码的问题
你当前的实现硬编码了j/h/s三个商品的判断逻辑,存在三个明显问题:
- 订单缺少任意一个商品key时,直接读取
order['x']会抛出KeyError,无法适配只买1-2种商品的订单场景 - 代码扩展性极差,如果后续店铺新增辣椒酱品类,必须手动修改判断条件才能支持
- 返回结果是自定义的城市小写缩写,和题目要求的输出格式不匹配
优化方案
优化核心逻辑是只校验订单中实际存在的商品需求,订单中未提及的商品默认购买量为0,不需要做库存校验;同时补充城市名称映射、大小写兼容逻辑,对齐题目要求。
优化后的可运行代码:
# 门店库存数据 inven = { 'tor': {'j':5,'h':0,'s':0}, 'van': {'j':10,'h':2,'s':6}, 'mon': {'j':3,'h':5,'s':5}, 'cal': {'j':1,'h':18,'s':2}, 'hal': {'j':28,'h':2,'s':12}, } # 城市编码与输出名称映射,匹配题目示例输出要求 city_name_map = { 'tor': 'Tor', 'van': 'Van', 'mon': 'Mon', 'cal': 'Cal', 'hal': 'Hali' } def find_order(order): res = [] for city_code, stock in inven.items(): fulfillable = True # 仅遍历订单中实际要求的商品做校验 for sku, required in order.items(): # 统一转小写兼容大小写输入,库存不足直接标记为不可履约 if stock.get(sku.lower(), 0) < required: fulfillable = False break if fulfillable: res.append(city_name_map[city_code]) return res # 测试用例验证 if __name__ == "__main__": print(find_order({'j':3, 'h':2, 's':4})) # 输出: ['Van', 'Mon', 'Hali'] print(find_order({'h':7, 's':1})) # 输出: ['Cal']
新手面试准备提示
- 写业务逻辑时尽量避免硬编码固定字段,优先基于输入内容做动态遍历,既能减少异常报错,也能提升代码扩展性
- 写完代码后必须覆盖边界场景测试:比如单商品订单、库存刚好满足需求、某商品库存为0等场景,不要仅验证全字段输入的理想情况
- 注意对齐题目要求的输入输出格式,类似返回值命名、大小写这类细节问题,面试时很容易丢分
内容的提问来源于stack exchange,提问作者Sumit Dadwal
相关产品推荐
相关产品推荐

