LeetCode 1105. Filling Bookcase Shelves

Posted hankunyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1105. Filling Bookcase Shelves相关的知识,希望对你有一定的参考价值。

本题第一眼看上去很难,但是实际上并不是二维的问题,而是一个一维的数组分段的问题。

本题需要格外注意下标,很容易出错。

为了减少对第一本书的初始化,记 dp[i] 为前i本书所需的最小高度,即下标 0~i-1,初始条件为 dp[0]=0

用j表示从下标j开始放到下一个row,即 [j~i-1] 为新的一层。0≤j≤i-1 

dp[i] = min_j dp[j] + height from index j~i-1 (index j~i-1 should < shelf_width) 0≤j≤i-1 

j从后往前遍历是为了在 width 超过的情况下早点退出循环。

class Solution 
public:
    int minHeightShelves(vector<vector<int>>& books, int shelf_width) 
        int n=books.size();
        // dp[i] - first i books [0~i-1]
        // dp[i] = min_j dp[j] + height from index j~i-1  (index j~i-1 should < shelf_width) 0<=j<=i-1
        vector<int> dp(n+1,INT_MAX/2);
        dp[0] = 0;
        for (int i=1;i<=n;++i)
            int height=0, width=0;
            for (int j=i-1;j>=0;--j)
                width += books[j][0];
                if (width>shelf_width) break;
                height = max(height,books[j][1]);
                dp[i] = min(dp[i], dp[j]+height);
            
          
        return dp[n];
    
;

时间复杂度 O(n^2)

以上是关于LeetCode 1105. Filling Bookcase Shelves的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-python 1105.填充书架

NumPy genfromtxt:正确使用filling_missing

e587. Filling Basic Shapes

CGAL实现Hole Filling(补洞)功能

CGAL实现Hole Filling(补洞)功能

A. Filling Shapes1000 / 找规律