LeetCode 739

739. 每日温度

该问题本质上是找下一个比当前数更大的数的下标,最后所求的数组记录的即为下标差。一开始做这题的时候,我一直关注着具体数值,导致一直不知道从哪入手。

方法一:

用栈记录下标,如果当前数<栈顶数,入栈,当前数>栈顶数,出栈,出栈的数与当前数的下标差即为出栈数的res值

Java

class Solution {
    public int[] dailyTemperatures(int[] T) {
        int[] res = new int[T.length];
        Stack<Integer> st = new Stack<>();
        for(int i = 0; i < T.length;i++){
            while(!st.isEmpty()&&T[i] > T[st.peek()]){
                int temp = st.pop();
                res[temp] = i - temp;
            }
            st.push(i);
        }
        return res;
    }
}

方法二:

所求的数组类似于kmp算法的next数组,从后往前遍历T数组,res数组记录比该数大的数所在的相对位置。

Java

public int[] dailyTemperatures(int[] T) {
    int[] res = new int[T.length];
    res[T.length - 1] = 0;
    for (int i = T.length - 2; i >= 0; i--) {
        for (int j = i + 1; j < T.length; j += res[j]) {
            if (T[i] < T[j]) {
                res[i] = j - i;
                break;
            } else if (res[j] == 0) {
                res[i] = 0;
                break;
            }
        }
    }
    return res;
}
posted @ 2020-06-14 17:07  咸鱼不闲咋整啊  阅读(158)  评论(0编辑  收藏  举报