|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天的题目:
假设你是建造寺庙的建筑师。寺庙的柱子是由木头制成,每根柱子必须是一节完整的木头而且不能是被连接得到的。
给出 len(woods) 段具有不同长度的木头。你的寺庙有 m 根高度严格相同的柱子。求寺庙的最大高度。
示例 1:
输入:m = 3, woods = [2, 3, 4]
输出:2
解释:选择长度为 2 的木头并且长度为 4 的木头被分为两段长度为 2 的木头。 示例 2:
输入:m = 3, woods = [2, 10]
输出:3
解释:长度为 10 的木头分为 3 段长度为 3 的木头和一根长度为 1 的木头。
 欢迎大家一起答题! 
本帖最后由 kinkon 于 2020-4-18 09:49 编辑
经历一段学习,终于能按要求完成,二分法
- def f336(m,woods):
- if m <= 0 or not woods:
- return 0
- left, right = min(woods), sum(woods) // m
- nds = lambda mid: sum(wood // mid for wood in woods) >= m
- while left + 1 < right:
- mid = left + (right - left)//2
- if nds(mid):
- left = mid
- else:
- right = mid
- if nds(right):
- return right
- elif nds(left):
- return left
- return 0
复制代码
|
评分
-
查看全部评分
|