单调栈

本文介绍了单调栈的概念,包括单调递增和单调递减栈,并通过三个具体题目——视野总和、下一个更大元素和每日温度,展示了如何利用单调栈解决这些问题。在视野总和问题中,当入栈元素大于栈顶元素时,累计当前栈内元素个数。对于下一个更大元素,单调栈可以找到nums2中每个元素右边的第一个更大元素。在每日温度问题中,单调栈帮助计算需要等待多久温度才会升高。
摘要由CSDN通过智能技术生成

一、单调栈定义

  • 单调递增栈:数据出栈的序列为单调递增序列(比站内元素小就入栈,否则将栈中比当前元素小的元素弹出后再入栈)
  • 单调递减栈:数据出栈的序列为单调递减序列(比站内元素大就入栈,否则将栈中比当前元素大的元素弹出后再入栈)

二、题目

(一)视野总和

【题目】

描叙:有 n 个人站队,所有的人全部向右看,个子高的可以看到个子低的发型,给出每个人的身高,问所有人能看到其他人发现总和是多少。

输入:4 3 7 1
输出:2

输入:20,10,5,7,15,8,6
输出:11

思路:每次入栈的时候,即栈顶元素大于入栈元素的时候,sum加上当前栈内元素个数。

	/**
     * 视野总和
     *描叙:有 n 个人站队,所有的人全部向右看,个子高的可以看到个子低的发型,
     * 给出每个人的身高,问所有人能看到其他人发现总和是多少。
     *
     * 输入:4 3 7 1
     * 输出:2
     *
     * 每次入栈的时候,即栈顶元素大于入栈元素的时候,总和加上当前栈内元素个数
     * */
    public int sightSum(int[] nums) {
   
        if (nums == null || nums.length==0) return 0;

        Stack<Integer> stack = new Stack<>();

        int i,sum;

        sum = 0;
        for (i=0; i<nums.length; i++) {
   
            // 栈为空的时候,sum不变,只是加入元素
            if (stack.empty()) {
   
                stack.add(nums[i]);
            } else {
   
                // 栈不为空,同时栈顶小于入栈元素
                while (!stack.empty() && stack<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员世杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值