当前位置: 首页 > article >正文

算法训练营day50(补),单调栈2

// 503. 下一个更大元素 II

func nextGreaterElements(nums []int) []int {

  n := len(nums)

  result := make([]int, n)

  for i := 0; i < n; i++ {

    result[i] = -1

  }

  stack := make([]int, 0)

  //因为收尾相连,采用i%2运算实现循环

  for i := 0; i < 2*n; i++ {

    j := i % n

    for len(stack) > 0 && nums[j] > nums[stack[len(stack)-1]] {

      index := stack[len(stack)-1]

      stack = stack[:len(stack)-1]

      result[index] = nums[j]

    }

    stack = append(stack, j)

  }

  return result

}

//42. 接雨水

func trap(height []int) int {

  n := len(height)

  stack := make([]int, 1, n)

  sum := 0

  for i := 1; i < n; i++ {

    if height[i] == height[stack[len(stack)-1]] {

      stack = stack[:len(stack)-1]

    } else {

      for len(stack) > 0 && height[i] > height[stack[len(stack)-1]] {

        mid := stack[len(stack)-1]

        stack = stack[:len(stack)-1]

        if len(stack) > 0 {

          //求高度

          h := min(height[i], height[stack[len(stack)-1]]) - height[mid]

          //求宽度

          w := i - stack[len(stack)-1] - 1

          //求总面积

          sum += (h * w)

        }

      }

    }

    stack = append(stack, i)

  }

  return sum

}

func min(a, b int) int {

  if a < b {

    return a

  }

  return b

}


http://www.kler.cn/a/271312.html

相关文章:

  • MySQL安装(Mac系统)
  • 智慧城市与数字孪生:共创未来城市的智慧生活
  • HCIP—OSPF课后练习一
  • 实现HBase表和RDB表的转化(附Java源码资源)
  • 由浅到深认识C语言(11):结构体
  • nginx多级代理配置获取客户端真实ip
  • 【运维】StarRocks数据迁移到新集群(针对于集群互通、不互通的情况)
  • Kubernetes kafka系列 | k8s部署kafka+zookeepe集群(可外部通信)
  • 15.7k stars一个实用型OCR,支持80多种语言
  • Day39:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化
  • 如何保存缓存和MySQL的双写一致呢?
  • 图解缓存淘汰算法 LRU、LFU | 最近最少使用、最不经常使用算法 | go语言实现
  • 数据可视化-ECharts Html项目实战(1)
  • 24计算机考研调剂 | 南昌航空大学
  • 02python计算与变量
  • 一体成型PFA尖头镊子高纯特氟龙材质镊子适用半导体新材料
  • Docker 解析:使用 Dockerfile 自动构建镜像
  • mybatis的where标签?
  • 网络爬虫丨基于scrapy+mysql爬取博客信息
  • pyflink1.18.0 keyby之后使用自定义keyedProcessfunction报错