LEETCODE 198. House Robber
class Solution {
public:
int rob(vector<int>& nums) {
int len = nums.size();
if(!len) return 0;
if(len == 1) return nums[0];
std::vector<int> mem(len,0);
mem[0] = nums[0];
mem[1] = nums[1] > nums[0] ? nums[1] : nums[0];
for(int i = 2;i < len; ++i){
mem[i] = max(mem[i-1],mem[i-2]+nums[i]);
}
return mem[len-1];
}
};
这道题是典型的动态规划题,用空间换时间,将问题分解为小问题解决,每一次选择抢还是不抢取决于前一次和这次加上上上次的大小,如果抢了收益大,就抢。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步