题目解析 | 豆包MarsCode AI刷题

100 阅读4分钟

题解:小C点菜问题

问题理解

题目要求我们找出在给定的菜品价格列表中,单价不超过某个上限 m 的菜品中,数量最多的那一组菜的数量。

数据结构选择

为了高效地统计每种价格的菜品数量,我们选择使用一个字典 price_count,其中键是菜品的价格,值是该价格菜品的数量。

算法步骤

  1. 初始化字典
    • 创建一个空字典 price_count 用于存储每种价格的菜品数量。
  2. 遍历菜品列表
    • 对于每个菜品的价格 price,检查其是否不超过上限 m
    • 如果不超过,则在字典中增加该价格的计数。如果该价格已经在字典中,则增加其计数;否则,初始化该价格的计数为1。
  3. 找出最大计数
    • 遍历字典中的所有计数值,找出最大的计数值。
  4. 返回结果
    • 返回最大计数值作为结果。

代码实现

def solution(m: int, w: list) -> int:
    # 创建一个字典来统计每种价格的菜的数量
    price_count = {}
    
    # 遍历菜品列表,统计每种价格的菜的数量
    for price in w:
        if price <= m:  # 只统计价格不超过 m 的菜
            if price in price_count:
                price_count[price] += 1
            else:
                price_count[price] = 1
    
    # 找出数量最多的那一组菜
    max_count = 0
    for count in price_count.values():
        if count > max_count:
            max_count = count
    
    return max_count

代码解释

  1. 字典初始化price_count = {} 初始化一个空字典。
  2. 遍历菜品列表for price in w: 遍历每个菜品的价格。
    • 价格检查if price <= m: 检查价格是否不超过上限 m
    • 计数更新if price in price_count: 检查价格是否已经在字典中,如果在,则增加计数;否则,初始化计数为1。
  3. 找出最大计数for count in price_count.values(): 遍历字典中的所有计数值,找出最大的计数值。
  4. 返回结果return max_count 返回最大计数值。

题解:版本号比较

问题描述

在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。我们需要根据两个版本号 version1version2,判断哪个版本更新,或者它们是否相同。

解题思路

  1. 分割版本号

    • 首先,我们需要将版本号字符串分割成修订号列表。例如,版本号 "1.0.1" 应该被分割成 ["1", "0", "1"]
  2. 获取修订号数量

    • 获取两个版本号修订号的数量,以便在比较时知道哪个版本号的修订号更多。
  3. 比较修订号

    • 从左到右依次比较修订号。如果某个版本号的修订号数量不足,则默认补为 0
    • 将修订号字符串转换为整数进行比较,忽略前导零。
  4. 返回比较结果

    • 如果某个修订号不相等,直接返回比较结果。
    • 如果所有修订号都相等,返回 0

代码实现

def solution(version1, version2):
    # 将版本号字符串分割成修订号列表
    v1_parts = version1.split('.')
    v2_parts = version2.split('.')
    
    # 获取两个版本号修订号的数量
    len1 = len(v1_parts)
    len2 = len(v2_parts)
    
    # 比较修订号
    for i in range(max(len1, len2)):
        # 如果某个版本号没有足够的修订号,默认补为0
        v1 = int(v1_parts[i]) if i < len1 else 0
        v2 = int(v2_parts[i]) if i < len2 else 0
        
        # 比较当前修订号
        if v1 > v2:
            return 1
        elif v1 < v2:
            return -1
    
    # 如果所有修订号都相等,返回0
    return 0

代码解释

  1. 分割版本号

    • v1_parts = version1.split('.')v2_parts = version2.split('.') 将版本号字符串分割成修订号列表。
  2. 获取修订号数量

    • len1 = len(v1_parts)len2 = len(v2_parts) 获取两个版本号修订号的数量。
  3. 比较修订号

    • for i in range(max(len1, len2)) 遍历修订号,确保比较所有修订号。
    • v1 = int(v1_parts[i]) if i < len1 else 0v2 = int(v2_parts[i]) if i < len2 else 0 如果某个版本号没有足够的修订号,默认补为 0
    • if v1 > v2: return 1elif v1 < v2: return -1 比较当前修订号,如果某个修订号不相等,直接返回比较结果。
  4. 返回比较结果

    • return 0 如果所有修订号都相等,返回 0