LeetCode-739. 每日温度

乐云一
  • 刷题日记
  • LeetCode
About 518 wordsAbout 2 min

示例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]

思路:

题目里给的是一组单调数组。 首先他没有规律,递增/递减,其次没有数据关联。 所以方向从数组数学问题转到数学逻辑问题上。 当然了,暴力破解的双循环,很容易一眼看出。 虽然意义不明显,但是还是可以从双循环中得出结论。

  • 当遍历到温度比当前下标温度大时,结束循环
  • 内层循环的过程中其实可以算出非本次循环下标的数组结果。

以此为头,当我们遍历下标2[75]的时候,会发现虽然要遍历到下标6[76]但是,当遍历到下标5[72]的时候,下标3[71]和下标4[69]的结果值也能看出来是2和1。

假设我们将遍历出来的下标各值不移除,而是堆积在一个盒子里,那么当遍历到72的时候,发现69和71比他小,且下标在他前面。 可以得出结果中下标71对应 result[3]= 5-3 =2 ;result[4]= 5-4 =1。

就这样,堆积不移除遍历的特性,思路就转变为栈的数据堆积与判断了。 不多说,上代码

代码:

  Stack<Integer> stack=new Stack(); //温度文档
        int [] result=new int [temperatures.length];
        for(int i=0;i<temperatures.length;i++){
                //如果遍历到了大于栈底元素的值,就将栈顶小于他的值清空弹出
            while(!stack.empty() && temperatures[stack.peek()]<temperatures[i]){
                Integer pop = stack.pop();
                result[pop]=i-pop;
            }
            stack.push(i);
        }
        return  result;

其中虽然栈中还有元素,但这些元素对应的下标代表着的就是没有在递增的温度。 因为数组初始化的时候默认为0,所以省下再去遍历栈的空间。 QQ截图20210913153241.png

Last update:
Contributors: leyunone
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.14.7