接雨水

42. 接雨水

题目描述

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水

img

示例

输入: [0,1,0,2,1,0,1,3,2,1,2,1]

输出: 6

思路

双指针法,如果左边的最高点的值小于右边的最高点的值,那么那个凹槽一定可以放水

代码

//work it right
class Solution {
public:
    int superEggDrop(int K, int N) {
        vector<vector<int>> dp(K+1,vector<int>(N+1,0));
        int eggNUM=K;
        int floorNUM=N;
        for(int i=1;i<=floorNUM;++i)
            dp[1][i]=i;
        for (int i = 1; i <= eggNUM; ++i)
            dp[i][1]=1;
        for(int i=2;i<=eggNUM;i++)
        {
            for(int j=2;j<=floorNUM;j++)
            {
                dp[i][j]=j;
                for(int x=1;x<j;++x)
                    dp[i][j]=min(dp[i][j],max(dp[i][x-1],dp[i-1][j-x])+1);
            }
        }
        return dp[K][N];
    }
};
posted @ 2020-09-14 10:33  周颖  阅读(16)  评论(0)    收藏  举报