LeetCode每日一题,503. Next Greater Element II
先看题目描述
给定一个循环数组 nums,让我们输出 nums 中每个元素的下一个更大元素,若没有更大元素则输出 -1
算法和思路
单调栈
可以使用单调栈来解决本题,单调栈中存储的是数组中元素的下标,从栈底到栈顶的下标在 nums 中对应的元素是单调不升的
遍历数组 nums,遍历到元素 nums[i] 时,若栈顶的下标对应元素小于 nums[i],则不断弹出栈顶下标直至栈为空或栈顶下标对应元素不小于 nums[i],这时就将 i 插入栈顶,弹出下标对应值的下一个更大元素就是 nums[i]
最后遍历完 nums 时,栈不为空,其中存储下标对应的元素要么就是找不到下一个更大元素,要么就是下一个更大元素在其前面。若是找不到下一个更大元素,则令其在结果数组中对应值为 -1 即可;否则,就从 nums 中第一个元素起开始找比它大的元素
算法源码
单调栈
1 | class Solution { |
下面是题解的单调栈的方法的代码,和我的方法有一些不同,对于遍历一次 nums 数组后单调栈中剩余的下标,题解中代码是采取了再遍历一次 nums 数组的方式
1 | class Solution { |