伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

2020-03-01:给定一个非负数组arr,代表直方图。返回直方图的最大长方形面积。

来源:本站原创 浏览:104次 时间:2022-11-03

2020-03-01:给定一个非负数组arr,代表直方图。返回直方图的最大长方形面积。
福哥答案2020-03-01:

单调栈,大压小。有代码。

代码用golang编写,代码如下:

package mainimport (    "container/list"    "fmt")func main() {    arr := []int{3, 2, 4, 2, 5}    fmt.Println(largestRectangleArea1(arr))    fmt.Println(largestRectangleArea2(arr))}func largestRectangleArea1(height []int) int {    if len(height) == 0 {        return 0    }    maxArea := 0    stack := list.New().Init()    N := len(height)    for i := 0; i < N; i++ {        for !(stack.Len() == 0) && height[i] <= height[stack.Back().Value.(int)] {            j := stack.Back().Value.(int)            stack.Remove(stack.Back())            k := 0            if stack.Len() == 0 {                k = -1            } else {                k = stack.Back().Value.(int)            }            curArea := (i - k - 1) * height[j]            maxArea = getMax(maxArea, curArea)        }        stack.PushBack(i)    }    for !(stack.Len() == 0) {        j := stack.Back().Value.(int)        stack.Remove(stack.Back())        k := 0        if stack.Len() == 0 {            k = -1        } else {            k = stack.Back().Value.(int)        }        curArea := (N - k - 1) * height[j]        maxArea = getMax(maxArea, curArea)    }    return maxArea}func largestRectangleArea2(height []int) int {    if len(height) == 0 {        return 0    }    N := len(height)    stack := make([]int, N)    si := -1    maxArea := 0    for i := 0; i < N; i++ {        for si != -1 && height[i] <= height[stack[si]] {            j := stack[si]            si--            k := 0            if si == -1 {                k = -1            } else {                k = stack[si]            }            curArea := (i - k - 1) * height[j]            maxArea = getMax(maxArea, curArea)        }        si++        stack[si] = i    }    for si != -1 {        j := stack[si]        si--        k := 0        if si == -1 {            k = -1        } else {            k = stack[si]        }        curArea := (N - k - 1) * height[j]        maxArea = getMax(maxArea, curArea)    }    return maxArea}func getMax(a int, b int) int {    if a > b {        return a    } else {        return b    }}

执行结果如下:


左神java代码
力扣84. 柱状图中最大的矩形
评论

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net