LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

目录

739. 每日温度

503. 下一个更大元素 II

496. 下一个更大元素 I


 

739. 每日温度

【题目】:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

【方法1】暴力法,遍历

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

 

【方法2】栈,栈中存储尚未找到温度升高的第 i 天

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

 

【方法3】:用数组实现栈

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

【方法4】

从最后一天倒推着推。最后一天温度显然不会再升高,结果直接为0。倒数第二天的温度如果比倒数第一天低,那么结果为1;如果比倒数第一天高,则温度不会再升高,所以倒数第二天的结果也应该为0。
由此可知,要求出第 i 天对应的结果,只需要查询第 i+1 天对应的结果就可以:
若T[i] < T[i+1],那么res[i]=1;
若T[i] > T[i+1],那么查询res[i+1]:
      - 如果 res[i+1] = 0,即第 i 天温度比第 i+1 天高,并且第 i+1 天之后的天气不会有升高,则res[i]=0;
      - 如果 res[i+1] != 0,即第 i 天温度比第 i+1 天高,并且第 i+1 天之后的天气会有升高,则令 j=i+1,比较T[i]和T[j+res[j]],即将“第i天的温度”与“比第i+1天大的那天的温度”进行比较。

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I


503. 下一个更大元素 II

【题目】:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

【代码】:

【方法1】:栈,同739题的方法2

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

 

【方法2】:用数组实现栈,同739题的方法3

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I


496. 下一个更大元素 I

【题目】:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

【方法1】:先把nums2中数和索引存到map,nums1中的数 x 根据map找到其在nums2中的索引 index,用暴力法找到nums2中第一个比x大的数。

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

 

【方法2】:不同与方法1的是,方法2先把nums2中数 x 和 x 右边第一个比 x 大的数存到hashMap,即 map.put(x, x 右边第一个比 x 大的数),遍历nums1,在hashMap中去查找“下一个更大元素”,当找不到时则为-1

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I

效果:

LeetCode-739. 每日温度、503. 下一个更大元素 II、496. 下一个更大元素 I