华为OD机试真题2023_Swift_100_木板

解题思路
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])
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容