华为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])
    }
上一篇下一篇

猜你喜欢

热点阅读