栈专题之每日温度
题目链接
739. 每日温度 - 力扣(LeetCode)
思路
1.暴力解法(时间复杂度为O(N^2))
class Solution {public int[] dailyTemperatures(int[] nums) {int[] array=new int[nums.length];for(int i=0;i<nums.length;i++){
for(int j=i;j<nums.length;j++){
if(nums[j]>nums[i]){
array[i]=j-i;break;}else{
array[i]=0;
}}}return array;}
}
在力扣上会超时,注意如果不存在nums[j]>nums[i],则array[i]=0
2.使用单调栈
1.stack里面应该存放的是下标,而不应该是元素
2.我是从右往左解决的(因为有分析可以得知,只要可以进入while循环,就可以优先处理离此时的i最近的那个元素,这就是所谓的从右向左,可以自己调试代码,加以体会)
3.时间复杂度为O(N)
package hot;import java.util.Stack;public class qisanjiu {public static int[] dailyTemperatures(int[] nums) {Stack<Integer> stack=new Stack<>();int[] array=new int[nums.length];for(int i=0;i<nums.length;i++){while(!stack.isEmpty()&&nums[i]>nums[stack.peek()]){int m=stack.pop();array[m]=i-m;}stack.push(i);}return array;}public static void main(String[] args) {int[] nums={73,74,75,71,69,72,76,73};int[] ints = dailyTemperatures(nums);for(int x:ints){System.out.print(x+" ");}}
}