题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

package main

import (
    "fmt"
)

func main() {
    
    //接收参数
    var count int
    fmt.Scan(&count)
    ori := count 

    nums := make([]int, ori, ori)
    index := 0
    for count > 0 {
       height := 0
       fmt.Scan(&height)

       nums[index] = height
       count--
       index++
    }

    if len(nums) < 3 {
        fmt.Print(0)
        return
    }


    dpUp := make([]int, ori, ori) //dpUp[i] --> 以i为顶点时的递增最高值(顶点,左边元素均小于自己)
    dpDown := make([]int, ori, ori) //dpDown[i] --> 以i为顶点时的递减最高值(顶点,右边元素均小于自己)

    for i := 0; i < ori; i++ {
        dpUp[i] = 1
        dpDown[i] = 1
    }

    for i := 1; i < ori; i++ {
        for j := 0; j < i; j++ {
            if nums[i] > nums[j] {
                dpUp[i] = getMax(dpUp[i], dpUp[j]+1)
            }
        }
    }

     for i := ori-2; i >= 0; i-- {
        for j := ori-1; j > i; j-- {
            if nums[i] > nums[j] {
                dpDown[i] = getMax(dpDown[i], dpDown[j]+1)
            }
        }
    }

    var max int
    for i := 0; i < len(dpDown); i++ {
        max = getMax(max, dpDown[i]+dpUp[i]-1)
    }

    fmt.Println(ori-max)
}

func getMax(a, b int) int {
    if a > b {
        return a
    }
    return b
}

全部评论

相关推荐

小米 无线充电工程师 N*15(可能拿不满3个月)
点赞 评论 收藏
转发
海康威视 测试 14k×14
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务