返回
趣解LeetCode 2353:构筑美食评级体系
后端
2023-11-18 04:01:41
<#!title>趣解LeetCode 2353:构筑美食评级体系</#title>
前言
您好,各位美食爱好者和技术探索者!欢迎来到LeetCode 2353题的奇趣世界。今日,我们将一起踏上美食评级之旅,探究如何利用Python语言,构建一个独一无二的美食评级系统。话不多说,让我们立刻启程吧!
题意剖析
LeetCode 2353题的题意如下:
在一家餐厅里,每道菜都有一个独一无二的菜品ID和评级。如果顾客喜欢一道菜,他们就会给它一个正面的评价;如果顾客不喜欢一道菜,他们就会给它一个负面的评价。
现在,你需要设计一个美食评级系统。这个系统会跟踪每道菜的正面评价数和负面评价数,并根据这些数据计算出每道菜的综合评级。综合评级是一个介于-1和1之间的值,其中-1表示这道菜不受欢迎,1表示这道菜非常受欢迎。
给你一个数组
foods
,其中foods[i] = [IDi, ratingi]
,表示第i
道菜的ID和它的评级。请你返回一个数组result
,其中result[i]
是第i
道菜的综合评级。
读完题意后,我们不难发现,这道题考察的是我们使用字典和有序集合解决实际应用问题的能力。接下来,我们就将深入题干,逐步攻克难关。
Python实现
为了解决这道题,我们可以使用两个字典和一个有序集合来存储相关数据。
- 第一个字典用来存储菜品ID和对应菜品的评级列表。
- 第二个字典用来存储菜品ID和对应菜品的综合评级。
- 有序集合用来存储菜品ID和对应菜品的综合评级,并根据综合评级降序排列。
有了这些数据结构后,我们就可以按照以下步骤来实现算法:
- 首先,我们将foods数组中的数据分别存储到第一个字典和第二个字典中。
- 然后,我们将菜品ID和对应菜品的综合评级存储到有序集合中。
- 最后,我们就可以从有序集合中取出菜品ID和对应菜品的综合评级,并将其存储到result数组中。
以下是Python代码实现:
from collections import defaultdict, OrderedDict
def calculate_ratings(foods):
# 创建两个字典和一个有序集合
food_ratings = defaultdict(list)
food_scores = {}
food_scores_sorted = OrderedDict()
# 将foods数组中的数据存储到字典和有序集合中
for food in foods:
food_id, rating = food
food_ratings[food_id].append(rating)
food_scores[food_id] = 0
food_scores_sorted[food_id] = 0
# 计算每道菜的综合评级
for food_id, ratings in food_ratings.items():
food_scores[food_id] = sum(ratings) / len(ratings)
# 将菜品ID和对应菜品的综合评级存储到有序集合中
for food_id, score in food_scores.items():
food_scores_sorted[food_id] = score
# 从有序集合中取出菜品ID和对应菜品的综合评级,并存储到result数组中
result = []
for food_id, score in food_scores_sorted.items():
result.append([food_id, score])
return result
# 测试用例
foods = [[1, 2], [2, -1], [3, 5], [4, -3]]
print(calculate_ratings(foods))
结语
恭喜您,我们已经成功解决了LeetCode 2353题!通过这道题,我们掌握了如何使用Python语言,构建一个独一无二的美食评级系统。希望这篇文章能够帮助您在LeetCode的征途中更进一步。
如果您有任何疑问或建议,请随时在评论区留言。感谢您的阅读,期待与您下次再见!