青训营X豆包MarsCode 技术训练营第四课 | 豆包MarsCode AI 刷题

94 阅读3分钟

问题描述

牛妹需要用n根桥柱搭建一座桥,第一根桥柱和最后一根桥柱的高度已经确定,分别为a和b。为了保证桥梁的稳固性,相邻桥柱的高度差不能超过1。牛妹想知道,在保证稳固性的前提下,桥梁中最高的桥柱能有多高。你需要帮助牛妹计算桥梁最高的桥柱的高度。

思路分析

  1. 计算高度差:首先计算第一根桥柱和最后一根桥柱的高度差 diff = abs(b - a)

  2. 检查可行性:如果高度差 diff 大于桥柱数量减一 n - 1,则无法满足相邻桥柱高度差不超过 1 的条件,返回 -1。

  3. 计算最高的桥柱:如果可行,计算最高的桥柱高度。最高的桥柱高度可以通过以下公式计算:

    • 如果 a <= b,则最高的桥柱高度为 a + (n - 1) // 2
    • 如果 a > b,则最高的桥柱高度为 b + (n - 1) // 2

图解

假设 n=5n=5,a=1a=1,b=4b=4:

  1. 计算高度差diff = abs(4 - 1) = 3

  2. 检查可行性3 <= 4,可行。

  3. 计算最高的桥柱

    • a <= b,所以最高的桥柱高度为 1 + (5 - 1) // 2 = 1 + 2 = 3

代码详解

def solution(n: int, a: int, b: int) -> int: # 计算高度差 diff = abs(b - a)

# 检查可行性
if diff > n - 1:
    return -1

# 计算最高的桥柱高度
max_height = max(a, b) + (n - 1 - diff) // 2
return max_height

if name == 'main': print(solution(2, 1, 1) == 1) print(solution(3, 1, 1) == 2) print(solution(5, 3, 2) == 4) print(solution(5, 1, 100) == -1) print(solution(4, 1, 4) == 4)

知识总结

  1. 高度差计算:使用 abs 函数计算两个数的绝对值差。
  2. 可行性检查:通过比较高度差和桥柱数量减一来判断是否可行。
  3. 最高桥柱计算:根据桥柱的起始和结束高度,计算最高的桥柱高度。

学习计划

  1. 制定刷题计划

    • 设定目标:每天至少刷 3 题,每周至少完成 20 题。
    • 分类刷题:根据题目的难度和类型(如数组、字符串、动态规划等)进行分类刷题。
    • 定期复习:每周回顾一次错题,确保理解并掌握。
  2. 利用错题进行针对性学习

    • 记录错题:将做错的题目记录在一个文档中,标注错误原因和正确解法。
    • 分析错题:定期分析错题,找出自己的薄弱点。
    • 针对性练习:针对薄弱点进行专项练习,提高解题能力。

工具运用

  1. AI 刷题功能

    • 智能推荐:利用 AI 刷题平台的智能推荐功能,根据自己的水平和兴趣推荐题目。
    • 题解解析:查看 AI 提供的题解解析,理解不同的解题思路和技巧。
    • 在线评测:提交代码后,利用平台的在线评测功能,检查代码的正确性和效率。
  2. 结合其他学习资源

    • 视频教程:观看相关的视频教程,加深对算法和数据结构的理解。
    • 书籍阅读:阅读经典算法书籍,如《算法导论》、《编程珠玑》等,系统学习算法知识。
    • 社区交流:加入算法学习社区,与其他学习者交流心得和经验。

学习建议

  1. 持之以恒:算法学习是一个长期的过程,需要持之以恒的努力。
  2. 动手实践:理论知识很重要,但更重要的是通过实际编程来巩固和应用。
  3. 多角度思考:对于同一个问题,尝试从不同的角度和方法来解决,培养发散思维。
  4. 及时反馈:遇到问题及时寻求帮助,利用社区和平台的资源解决问题。