2024.6.24
**每日一题**
503.下一个更大元素 Ⅱ,刚开始思考时,会想到坐标变换,进而想到每个数字追多遍历数组的两倍长度,即我们可以把数组整体往后复制一遍,遍历查询即可,但是时间复杂度太高,考虑其他算法;使用单调栈,单调栈中保存的是下标,该下标数组在原数组对应的值是单调不升的,每次我们移动到数组中的一个新的位置 iii,我们就将当前单调栈中所有对应值小于 nums[i] 的下标弹出单调栈,这些值的下一个更大元素即为 nums[i](证明很简单:如果有更靠前的更大元素,那么这些位置将被提前弹出栈)。随后我们将位置 iii 入栈。
但是注意到只遍历一次序列是不够的,例如序列 [2,3,1][2,3,1][2,3,1],最后单调栈中将剩余 [3,1][3,1][3,1],其中元素 [1][1][1] 的下一个更大元素还是不知道的。