一、题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了抢到集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环,编号最大的箱子的下一个是编号为0的箱子。
请输出每个箱子贴的数字之后的第一个比它大的数,如果不存在则输出-1。
二、输入描述
输入一个数字子串,数字之间使用逗号分隔,例如:1,2,3,1
1 <= 子串中数字个数 <= 10000;
-100000 <= 每个数字值 <= 100000;
三、输出描述
下一个大的数列表,以逗号分隔,例如:2,3,6,-1,6
四、解题思路
我们可以使用单调栈解决本题。单调栈中保存的是下标,从栈底到栈顶的下标在数组 nums 中对应的值是单调不升的。
每次我们移动到数组中的一个新的位置 i,我们就将当前单调栈中所有对应值小于 nums[i] 的下标弹出单调栈,这些值的下一个更大元素即为
nums[i](证明很简单:如果有更靠前的更大元素,那么这些位置将被提前弹出栈)。随后我们将位置 i 入栈。
但是注意到只遍历一次序列是不够的,例如序列 [2,3,1],最后单调栈中将剩余 [3,1],其中元素 [1