解题思路
核心是贪心算法,核心逻辑是「用有限的木板数,优先跳过最大的空牛棚间隔,从而最小化总木板长度」,具体步骤:
特殊情况处理:若木板数 M ≥ 牛的数量 C,直接用 C 块木板各盖 1 个有牛的牛棚,总长度就是 C(最优解);
基础长度计算:先将有牛的牛棚位置排序,计算「覆盖所有有牛牛棚的最小连续长度」(最后一个有牛位置 - 第一个有牛位置 + 1);
找空间隔并排序:计算相邻有牛位置之间的空牛棚数(间隔),按从大到小排序;
贪心减间隔:用 M 块木板最多能拆分出 M-1 个间隔跳过,因此累加前 M-1 个最大的间隔,从基础长度中减去这些间隔,得到的就是最小总木板长度。
100%AC代码:
总结
核心策略:优先跳过最大的空牛棚间隔,减少木板需要覆盖的长度;
关键步骤:排序有牛位置→算总连续长度→算并排序空间隔→减最大的 M-1 个间隔。