博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 739. Daily Temperatures 每日温度
阅读量:5284 次
发布时间:2019-06-14

本文共 3168 字,大约阅读时间需要 10 分钟。

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.

For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].

Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].

给一个每天温度的数组,对于每一天,找出下一个比当前温度大的元素,记录它们之间的天数。

解法:栈,递减栈Descending Stack,新建一个长度和T相等的数组res,来记录天数。遍历数组,如果栈为空,直接如栈。如果栈不为空,且当前数字大于栈顶元素,pop出栈顶元素,求出下标差,也就是升温的天数,把这个差值记录给栈顶元素在res中的位置。然后继续看新的栈顶元素,直到当前数字小于等于栈顶元素停止。然后将当前数字入栈。最后返回res。

Java: Stack

public int[] dailyTemperatures(int[] temperatures) {    Stack
stack = new Stack<>(); int[] ret = new int[temperatures.length]; for(int i = 0; i < temperatures.length; i++) { while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) { int idx = stack.pop(); ret[idx] = i - idx; } stack.push(i); } return ret;}

Java: Array

public int[] dailyTemperatures(int[] temperatures) {    int[] stack = new int[temperatures.length];    int top = -1;    int[] ret = new int[temperatures.length];    for(int i = 0; i < temperatures.length; i++) {        while(top > -1 && temperatures[i] > temperatures[stack[top]]) {            int idx = stack[top--];            ret[idx] = i - idx;        }        stack[++top] = i;    }    return ret;} 

Python:

# Time:  O(n)# Space: O(n)class Solution(object):    def dailyTemperatures(self, temperatures):        """        :type temperatures: List[int]        :rtype: List[int]        """        result = [0] * len(temperatures)        stk = []        for i in xrange(len(temperatures)):            while stk and \                  temperatures[stk[-1]] < temperatures[i]:                idx = stk.pop()                result[idx] = i-idx            stk.append(i)        return result  

Python: wo

class Solution(object):    def dailyTemperatures(self, T):        """        :type T: List[int]        :rtype: List[int]        """        st = []        res = [0] * len(T)        for i in xrange(len(T)):            if not st or T[i] <= T[st[-1]]:                st.append(i)            else:                while st and T[i] > T[st[-1]]:                     j = st.pop()                    res[j] = i - j                st.append(i)                                                   return res

C++:

// Time:  O(n)// Space: O(n)class Solution {public:    vector
dailyTemperatures(vector
& temperatures) { vector
result(temperatures.size()); stack
stk; for (int i = 0; i < temperatures.size(); ++i) { while (!stk.empty() && temperatures[stk.top()] < temperatures[i]) { const auto idx = stk.top(); stk.pop(); result[idx] = i - idx; } stk.emplace(i); } return result; }};

    

类似题目:

 

 

转载于:https://www.cnblogs.com/lightwindy/p/9881122.html

你可能感兴趣的文章
Linux编程简介——gcc
查看>>
2019年春季学期第四周作业
查看>>
CF461B Appleman and Tree
查看>>
CF1215E Marbles
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>