《图片排版》题目分析
本题显而易见的做法是直接枚举删除了哪张图片,复杂度O(N);然后再通过O(N)的模拟排版计算出最后的高度。总的时间复杂度是O(N^2)。
优化的方法是用空间换时间,先预处理出一些有用的数据。
H(i):从头开始加入前i张图片后的情况,记录总高度、当前行高度、当前行剩余宽度。计算所有H(i)的复杂度是O(N)。
F(i, j): 假设当前行剩余宽度是j,这时开始加入第i张~最后一张的情况,记录增加的高度、当前行高度。计算所有F(i, j)的复杂度是O(NM)。
有了H(i)和F(i, j),我们再枚举删除的图片时,就可以直接合并相应的H和F,得到最终的高度。注意合并时,当前行高度需要取H和F两者中较大的。
总的复杂度是O(NM)。