豆包MarsCode AI刷题

156 阅读3分钟

题目解析:最小总价格选择菜品

题目描述: 小C在一家饭馆面对多个菜品选择,每个菜品有对应的价格和是否含有蘑菇的标记。小C希望在不超过蘑菇菜品数量限制的情况下,选择k道菜使得总价格最低。如果无法满足条件,则输出-1。 思路:

  1. 将菜品按照价格从小到大排序。
  2. 优先选择不含蘑菇的菜品,如果蘑菇菜品数量未达上限m,也选择含蘑菇的菜品。
  3. 确保选择的菜品数量达到k道。
  4. 如果最终选择的菜品数量不足k道,则输出-1,否则输出最小总价格。

代码 :def solution(s: str, a: list, m: int, k: int) -> int: dishes = [(a[i], s[i] == '1') for i in range(len(s))] dishes.sort(key=lambda x: x[0]) total_price = 0 mushroom_count = 0 selected_count = 0 for price, has_mushroom in dishes: if selected_count == k: break if has_mushroom and mushroom_count == m: continue total_price += price selected_count += 1 if has_mushroom: mushroom_count += 1 if selected_count < k: return -1 return total_price if name == 'main': print(solution("001", [10, 20, 30], 1, 2) == 30) print(solution("111", [10, 20, 30], 1, 2) == -1) print(solution("0101", [5, 15, 10, 20], 2, 3) == 30) 知识总结 新知识点:

  • 列表推导式:简洁地创建列表。
  • 元组:存储多个相关联的数据。
  • lambda 函数:匿名函数,用于排序等操作。
  • 条件表达式:用于逻辑判断和选择操作。 理解和建议:
  • 在解决实际问题时,首先要明确问题的目标和限制条件,然后设计出合理的算法流程。
  • 对于排序问题,通常需要考虑如何高效地比较和选择元素,Python 的内置排序函数非常强大,可以大大简化代码。
  • 对于复杂的问题,分解成小的模块逐一解决,最后再将模块组合起来。

学习计划 刷题计划:

  1. 每天至少刷一道算法题,保持手感和思维的活跃。
  2. 针对不同类型题目,如排序、搜索、动态规划等,制定专项练习计划。
  3. 定期回顾和总结做过的题目,特别是那些错误或耗时较长的题目。 利用错题学习:
  4. 建立错题本,记录错误原因和正确的解题思路。
  5. 定期复习错题,尝试不看答案重新解答。
  6. 对于反复出错的知识点,查找资料进行深入学习。 工具运用 AI 刷题功能:
  7. 利用 AI 刷题功能快速获取题目的反馈,如代码的正确性和性能。
  8. 根据 AI 的反馈调整解题思路,优化代码。 结合其他学习资源:
  9. 结合在线教程、书籍等资源,对特定知识点进行深入学习。
  10. 参加编程社区和论坛,与其他学习者交流解题经验和技巧。
  11. 利用在线判题系统,如 LeetCode、Codeforces 等,进行实战演练。