【栈】 739. 每日温度

739. 每日温度

解题思路

  • 维护一个单调栈
  • 如果当前元素小于栈顶元素 将该元素直接入栈
  • 如果当前元素大于栈顶元素 计算当前元素和栈顶元素的位置差
  • 将位置差存储下来
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        // 维护一个单调栈
        // 如果当前元素小于栈顶元素直接入栈

        //如果当前元素大于栈顶元素  计算当前元素和栈顶元素的位置差 
        // 将位置差存储下来

        Stack<Integer> stack = new Stack<>();
        int[] result = new int[temperatures.length];

        for(int i = 0; i < temperatures.length;i++){
            // 比较当前元素和栈顶元素
            // 栈顶元素村下的是序号
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()])           
            {
                // 如果当前栈不为空  并且当前元素大于栈顶元素 
                // 计算位置差
                int temp = stack.pop();
                result[temp] = i - temp;
                
            }
                stack.push(i);// 当前元素小于等于栈顶元素  直接入栈
            
        }
        return result;
    }
}

你可能感兴趣的:(java,算法,数据结构)