我有以下算法问题,我已经解决了,但不适用于不同的测试用例



我正在准备一轮技术面试,在准备过程中,我通过leetcode的面试问题部分遇到了这个问题。

我的解决方案可以在其输入字典中接受3个条目,少于3个就会抛出错误。

我还想知道,如果这个问题真的在LC的问题部分,你认为这个问题在LC的容易、中等和困难方面的排名是什么?

问题:

Juan Hernandez是一个拥有辣椒酱店的Shopify商人有五个地点:多伦多、温哥华、蒙特利尔、卡尔加里和哈利法克斯。他还在网上销售,并将酱汁从一家店运送到全国各地他的实体店。

他卖的辣椒酱是:

墨西哥胡椒(J)哈瓦那人(H)塞拉诺(S)每个位置的库存计数如下所示:

城市J H S猛龙5 0 0温哥华10 2 6蒙特利尔3 5 5卡尔加里1 18 2哈利法克斯28 2 12每次接到网上订单,他都要弄清楚哪些地点可以满足这个订单。写一个函数接受一个订单作为输入,并输出一个位置列表让所有的商品都有库存。

例子
Input : J:3. H:2 s:4
Output: Van, Mon, Hali
Input: H:7 S:1
Output: Cal

我的解决方案:

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},
}
order = {
'j':3,
'h':2,
's':4
}
def find_order(order):
output = []
for city in inven:
if order['j'] <= inven[city]['j'] and order['h'] <= inven[city]['h'] and order['s'] <= inven[city]['s']:
output.append(city)

return output

print(find_order(order))

抱歉,如果答案是非常简单的。我对编程还是个新手,这是我的第一轮技术。我现在只知道蟒蛇。如果不是你的语言,一个正确方向的提示将会很有帮助。

方法如下:

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},
}
order = {
'j':3,
'h':2,
's':4
}
order2 = {
'h':7,
's':1
}
def find_order(order):
return [city for city, amts in inven.items() if all(amt >= order[sauce] for sauce, amt in amts.items() if sauce in order)]
print(find_order(order))
print(find_order(order2))

输出:

['van', 'mon', 'hal']
['cal']

解释:

  • 在列表推导式中,我们构建了一个包含满足条件
  • 的每个city的列表。
  • 条件是订单中发现的所有酱料在给定的城市都有足够的数量来填补订单。

来自文档的帮助:

  • all()
  • 列表理解
  • dict.items()

你的解决方案看起来非常接近于ok。我猜你说少于3种的意思是不是所有的酱汁都在你的订单里。要修复在这种情况下得到的错误,您只需检查字典是否包含所有期望的键('j', 'h'和's'),如果其中一些键缺失,则以0的值插入它们。

def find_order(order):
if 'j' not in order:
order['j'] = 0
if 'h' not in order:
order['h'] = 0
if 's' not in order:
order['s'] = 0
output = []
for city in inven:
if order['j'] <= inven[city]['j'] and order['h'] <= inven[city]['h'] and order['s'] <= inven[city]['s']:
output.append(city)

return output

最新更新