首先记住一点:只要后面的相邻的一个元素比当前元素大,当前元素的结果集记为1。
比如这个:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出:?[1,1,4,2,1,1,0,0]
先初始化一个数组int[] res = new int[temperatures.length],数组的长度为temperatures.length,res数组初始化元素默认为0
① 74比73大,所以res[0] = 1? ? 1 - 0?
② 75比74大,所以res[1] = 1? ? 2 - 1
③ 76比75大,所以res[2] = 4? ? 6 - 2
④ 72比71大,所以res[3] = 2? ? 5 - 3
⑤ 72比69大,所以res[4] = 1? ? 5 - 4
⑥ 76比72大,所以res[5] = 1? ? 7 - 6
⑦ 73小于76,所以res[6] = 0
⑧ 73后面,所以res[7] = 0
本题借助一个辅助栈,这个栈存储的数组temperatures的下标,每次判断temperatures[i]是否大于栈顶的元素,也就是后面的元素是否大于前面的元素。stack中存储的是数组的下标,如果temperatures[i]大于temperatures[stack.peek()],记录下temperatures[stack.peek()]的下标,也就是弹出元素,使用i - stack.pop(),将元素存储在结果集中。
最终返回数组就行。