華為OD機試真題2023_Swift_100_木板

解題思路
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])
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容