重温算法之每日温度

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一.题目介绍

1.题目来源

链接:LeetCode

2.题目

给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指在第i天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用0来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60] 输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90] 输出: [1,1,0]  

提示:

1 <= temperatures.length <= 105

30 <= temperatures[i] <= 100

二.具体实现

1.实现思路

按题目的要求是返回比前一日高的温度集合,如果没有则记为0,那怎么去比较就是本题的重点了,我的想法是使用栈来实现,利用栈的特点以天数作为栈元素,对栈内元素进行比较,与前一个元素相比是小于则直接进栈,是大于则进行比较,最终得到结果。

2.实现代码

1)自己的实现方式

public int[] dailyTemperatures(int[] temperatures) {
    //采用单调栈,栈ding的元素和栈内的元素比较,小于直接进栈,大于则作比较
    //注意栈内存的是天数
    Deque<Integer> deque = new ArrayDeque<>();
    int[] res = new int[temperatures.length];
    for (int i = 0; i < temperatures.length; i++) {
        while (!deque.isEmpty() && temperatures[deque.peek()] < temperatures[i]) {
            int idx = deque.pop();
            res[idx] = i - idx;
        }
        deque.push(i);
    }
    return res;
}
复制代码

2)题友的实现方式

针对每个温度值 向后进行依次搜索 ,找到比当前温度更高的值。其原理是从左到右除了最后一个数其他所有的数都遍历一次,最后一个数据对应的结果肯定是0,就不需要计算,遍历的时候,每个数都去向后数,直到找到比它大的数,数的次数就是对应输出的值。

代码: image.png

3.运行结果

image.png

image.png

三.题后思考

在本题中使用栈作为媒介确实要比使用MAP好很多,而题友的想法更好,不用借助其他媒介,节省了使用空间,感觉自己还是很愚笨,在算法题上有先入为主的思想,比较容易吃亏,还是得多思考,换角度思考,不怎么做还能怎么做。

Supongo que te gusta

Origin juejin.im/post/7076422681230311432
Recomendado
Clasificación