2023每日刷题(五十二)
Leetcode—198.打家劫舍
算法思想
具体思路
首先,我们从上面的题目描述中抽象出题意。
● 从一个非负整数数组中找到一个子序列,并且该子序列的和最大
● 子序列中每个数的位置不能够相邻。举例来讲,如果子序列中包含位置为1的数,就不能包括位置为2的数。
实现代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if(n == 1) {return nums[0];}if(n == 2) {return max(nums[0], nums[1]);}int f[n];memset(f, 0, sizeof(f));f[0] = nums[0];f[1] = max(nums[1], nums[0]);for(int i = 2; i < n; i++) {f[i] = max(f[i - 1], f[i - 2] + nums[i]);}return f[n - 1];}
};
运行结果
空间优化实现代码
class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if(n == 1) {return nums[0];}if(n == 2) {return max(nums[0], nums[1]);}int f0 = 0, f1 = 0, new_f = 0;f0 = nums[0];f1 = max(nums[1], nums[0]);for(int i = 2; i < n; i++) {new_f = max(f1, f0 + nums[i]);f0 = f1;f1 = new_f;}return new_f;}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!