滚动数组Rolling Array
如果状态依赖关系只在相邻的几层之间,则可以使用滚动数组进行优化,滚动数组可以让空间复杂度降维。
题型1:数字三角形
给定一个三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
class Solution {public:int minimumTotal(vector<vector<int>>& triangle) {if(triangle.size() == 0)return 0;int len = triangle.size();int dp[2][len];dp[0][0] = triangle[0][0];for(int i = 1; i < len; i++){dp[i % 2][0] = dp[(i - 1) % 2][0] + triangle[i][0];dp[i % 2][i] = dp[(i - 1) % 2][i - 1] + triangle[i][i];for(int j = 1; j < i; j++){dp[i % 2][j] = min(dp[(i - 1) % 2][j - 1], dp[(i - 1) % 2][j])+ triangle[i][j];}}int minPath = dp[(len - 1) % 2][0];for(int i = 1; i < len; i++){minPath = min(minPath, dp[(len - 1) % 2][i]);}return minPath;}};
用两行滚动数组记录各个点的最短路径
