华为OD机试真题2023_Swift_100_木板
2023-02-28 本文已影响0人
雾中探雪
解题思路
1、先对所有木材进行升序排列
2、对木料m一节一节的减少,直到减少到 0
3、对升序的木板进行遍历,如果前一个木板比后一个木板短,则将减少的这一节木料,添加到前一个木板上
4、如果添加到所有木板都一样高了,就将木料添加到最后一个木板上
5、当木料m全部用完,最终打印出木板数组里第一个模板高度就是最短木板的最大长度
// 木板
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])
}