LeetCode 503. 下一个更大元素 II
题目链接:503. 下一个更大元素 II - 力扣(LeetCode)
该题在上一题:496. 下一个更大元素 I - 力扣(LeetCode)的基础上,进行循环遍历,因此我们就采用取模的方式来循环。
代码:
python
#python
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
dp = [-1] * len(nums)
stack = []
for i in range(len(nums)*2):
while(len(stack) != 0 and nums[i%len(nums)] > nums[stack[-1]]): //取模
dp[stack[-1]] = nums[i%len(nums)] //取模
stack.pop()
stack.append(i%len(nums))
return dp
LeetCode 42. 接雨水
之前好像考虑使用双指针尝试过该题,这次采用单调栈来实现。
代码:
python
#python
class Solution:
def trap(self, height: List[int]) -> int:
stack = [0]
result = 0
for i in range(1, len(height)):
while stack and height[i] > height[stack[-1]]:
mid_height = stack.pop()
if stack:
# 雨水高度是 min(凹槽左侧高度, 凹槽右侧高度) - 凹槽底部高度
h = min(height[stack[-1]], height[i]) - height[mid_height]
# 雨水宽度是 凹槽右侧的下标 - 凹槽左侧的下标 - 1
w = i - stack[-1] - 1
# 累计总雨水体积
result += h * w
stack.append(i)
return result