初步思路:拼接两个一摸一样的数组,再使用单调栈的方法
总结:更高效的方法是在遍历的过程中模拟走了两边数组
- 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
用时:30分钟
初步思路:暴力解法
总结:稍微高效一点的方法是使用双指针
- leftheight, rightheight = [0]*len(height), [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)):
-
- summ = min(leftheight[i],rightheight[i])-height[i]
-
- result += summ
-
- return result
单调栈的解法一时还掌握不了,留着以后再学习。
用时:60分钟