


解題思路
1、先對所有木材進行升序排列
2、對木料m一節(jié)一節(jié)的減少,直到減少到 0
3、對升序的木板進行遍歷,如果前一個木板比后一個木板短,則將減少的這一節(jié)木料,添加到前一個木板上
4、如果添加到所有木板都一樣高了,就將木料添加到最后一個木板上
5、當木料m全部用完,最終打印出木板數(shù)組里第一個模板高度就是最短木板的最大長度
// 木板
func HW2023002() {
// 測試用例
// let line1 = "5 3", line2 = "4 5 3 5 5"
// let line1 = "5 2", line2 = "4 5 3 5 5"
// let line1 = "5 6", line2 = "2 4 3 6 5 5"
// let line1 = "5 2", line2 = "5 5 5 5 5"
// let woodNumArr = line1.components(separatedBy: " ").map { Int($0) ?? 0}
// var woodSortArr = line2.components(separatedBy: " ").map { Int($0) ?? 0}.sorted()
// 正式代碼
let woodNumArr = String(readLine()!).components(separatedBy: " ").map { Int($0) ?? 0}
var woodSortArr = String(readLine()!).components(separatedBy: " ").map { Int($0) ?? 0}.sorted()
let n: Int = Int(woodNumArr.first!)
var m: Int = Int(woodNumArr.last!)
while m > 0 {
m -= 1 // 木材一段一段的截
for i in 1..<n {
// 如果后一段比前一段高
if woodSortArr[i] > woodSortArr[i-1] {
// 給前一段+1
woodSortArr[i-1] += 1
break
}
// 如果所有木材一樣高,給最后一段+1
if i == n - 1 {
woodSortArr[i] += 1
}
}
}
print(woodSortArr[0])
}