返回

趣解LeetCode 2353:构筑美食评级体系

后端

<#!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和对应菜品的综合评级,并根据综合评级降序排列。

有了这些数据结构后,我们就可以按照以下步骤来实现算法:

  1. 首先,我们将foods数组中的数据分别存储到第一个字典和第二个字典中。
  2. 然后,我们将菜品ID和对应菜品的综合评级存储到有序集合中。
  3. 最后,我们就可以从有序集合中取出菜品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的征途中更进一步。

如果您有任何疑问或建议,请随时在评论区留言。感谢您的阅读,期待与您下次再见!