美文网首页
华为OD机试真题2023_Swift_100_木板

华为OD机试真题2023_Swift_100_木板

作者: 雾中探雪 | 来源:发表于2023-02-28 14:59 被阅读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])
        }
    

    相关文章

      网友评论

          本文标题:华为OD机试真题2023_Swift_100_木板

          本文链接:https://www.haomeiwen.com/subject/pislldtx.html