小U的数字插入问题、小C点菜问题题目解析

17 阅读3分钟

一、小U的数字插入问题

算法选择: 使用贪心算法。贪心算法的核心思想是每一步都做出局部最优的选择,以期望最终得到全局最优解。 解题思路:

  • 我们需要将数字 b 插入到数字 a 的某个位置,使得插入后的数字最大。
  • 插入位置的选择是关键,因为不同的插入位置会导致不同的结果。

算法步骤

1.将 a 和 b 转换为字符串形式。 2.遍历字符串 a 的每个位置,尝试将 b 插入到该位置,并记录插入后的结果。 3.比较所有可能的插入结果,选择最大的一个。

注意点:

1.数据类型的转换

  • 字符串转换:由于需要在数字的不同位置进行插入操作,需要将数字 a 和 b 转换为字符串形式然后进行字符串拼接操作。
  • 整数转换:在比较插入后的结果时,需要将字符串转换回整数形式,以便进行数值比较。

2. 插入位置的选择

  • 遍历所有可能的插入位置:我们需要遍历数字 a 的所有可能插入位置(包括在数字 a 的开头和结尾),以确保找到最大的插入结果。

二、 小C点菜问题 解题思路:

  • 这道题可以用到两个数据结构,一个是Counter,一个是列表推导式
  • Counter 是一个非常有用的工具,可以用来统计列表中每个元素出现的次数。对于这道题,用 Counter 来统计每道菜的价格出现的次数
  • 使用列表推导式 [t for t in d.items() if t[0] <= m] 过滤出价格不超过 m 的菜品。
  • 算法步骤:
  1. 统计每道菜的价格出现的次数:

    • 使用 Counter 统计每道菜的价格出现的次数。
  2. 过滤价格不超过 m 的菜品:

    • 遍历 Counter 的结果,过滤出价格不超过 m 的菜品。
  3. 找到出现次数最多的菜品:

    • 在过滤后的结果中,找到出现次数最多的菜品。 代码实现思路:

代码实现思路

  1. 统计每道菜的价格出现的次数:

    • 使用 Counter(w) 来统计每道菜的价格出现的次数。
  2. 过滤价格不超过 m 的菜品:

    • 使用列表推导式 [t for t in d.items() if t[0] <= m] 过滤出价格不超过 m 的菜品。
  3. 找到出现次数最多的菜品:

    • 使用 max 函数找到出现次数最多的菜品,并返回其出现次数 下面给出代码实现:
from collections import Counter
def solution(m: int, w: list) -> int:
    # write code here
    d=Counter(w)
    lis=[t for t in d.items() if t[0]<=m]
    # print(lis)
    if lis:
        return sorted(lis,key=lambda item:item[1],reverse=True)[0][1]
    return 0
    

if __name__ == '__main__':
    print(solution(6, [2, 3, 3, 6, 6, 6, 9, 9, 23]) == 3)
    print(solution(4, [1, 2, 4, 4, 4]) == 3)
    print(solution(5, [5, 5, 5, 5, 6, 7, 8]) == 4)
    print(solution(11, [14]))