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
双指针法
class Solution:
def trap(self, height: List[int]) -> int:
leftheight = [0] * len(height)
rightheight = [0] * len(height)
leftheight[0] = height[0]
for i in range(1, len(height)):
leftheight[i] = max(leftheight[i - 1], height[i])
rightheight[-1] = height[-1]
for i in range(len(height)-2, -1, -1):
rightheight[i] = max(rightheight[i + 1],height[i])
result = 0
for i in range(0,len(height)):
sum_ = min(leftheight[i],rightheight[i]) - height[i]
result += sum_
return result