每日温度[单调栈练习]

前言

贪心/dp/单调栈一类的题,是练习问题分析能力 & 代码能力的好题目。

一、每日温度

在这里插入图片描述

二、单调栈

package everyday.medium;

// 每日温度。
public class DailyTemperatures {
    /*
    target:找后面比当天温度高&离当天最近。
    如果是求一天t[i],则往后遍历,寻找到第一个温度比其高的t[j],t[j] > t[i],则 ans = j - i;
    如果每一天都要求,就必须把单调减的温度存起来,后面找到一个温度比peek()高的,此时就不仅仅出一个peek了,而是把比当天小的全部出栈,且记录过了多少天。
    单调栈中选择存数组hash的key,即索引,不仅可以得到两天的距离,还可以通过temperatures数组比较两天的温度。
     */
    public int[] dailyTemperatures(int[] temperatures) {
        int[] sk = new int[(int) 1e5];
        int len = 0;

        int n = temperatures.length;
        int[] ans = new int[n];

        for (int i = 0; i < n; i++) {
            if (0 == len || temperatures[sk[len - 1]] >= temperatures[i]) sk[len++] = i;
            else {
                while (0 != len && temperatures[sk[len - 1]] < temperatures[i])
                    ans[sk[len - 1]] = i - sk[--len];
                sk[len++] = i;
            }
        }
        return ans;
    }
    /*
    debug记录,
    1-长度表示第N天后,不是当天,所以是n = j - i;而不是n = j - i + 1,这是不认真思考/不太专注导致,注意。
    2-直接用单调栈中的下标和温度比,忘记单调栈只存hash索引,这也是不认真/不太专注导致,注意。
    收获
    1-写这种有分析成分的 & 比较考逻辑能力的,比写死知识点练习的爽很多。
    2-虽然还不太专注,但是可以训练。
     */
}

总结

1)写这种有分析成分的 & 比较考逻辑能力的,比写死知识点练习的爽很多。
2)虽然还不太专注,但是可以训练。

参考文献

[1] LeetCode 每日温度

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值