代码随想录算法训练营19期第59天

 503.下一个更大元素II 

代码随想录  

初步思路:拼接两个一摸一样的数组,再使用单调栈的方法

总结:更高效的方法是在遍历的过程中模拟走了两边数组

 

       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分钟

 42. 接雨水  

代码随想录  

初步思路:暴力解法

总结:稍微高效一点的方法是使用双指针

        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分钟

你可能感兴趣的:(算法,leetcode)