《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(33)玲珑宝塔藏珍宝 - 打家劫舍(空间压缩)
《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(33)玲珑宝塔藏珍宝 - 打家劫舍(空间压缩)
哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的玲珑谷,谷中有一座巨大的玲珑宝塔,塔身闪烁着神秘的光芒。谷口有一块巨大的石碑,上面刻着一行文字:“欲破此塔,需以玲珑宝塔之力,藏珍宝,空间压缩显真身。”
哪吒定睛一看,石碑上还有一行小字:“数组[1, 2, 3, 1]
的打家劫舍最大金额为4
。”哪吒心中一动,他知道这是一道关于打家劫舍的动态规划问题,需要通过空间压缩的技巧来优化算法。
暴力解法:玲珑宝塔的初次尝试
哪吒心想:“要计算最大金额,我可以逐个房屋选择是否抢劫。”他催动玲珑宝塔之力,从第一个房屋开始,逐个房屋选择,试图找到最大金额。
int rob(vector<int>& nums) {
int n = nums.size();
if (n == 0) return 0;
if (n == 1) return nums[0];
vector<int> dp(n);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < n; ++i) {
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
}
return dp[n -