BM78. 打家劫舍(一)
描述
示例1
输入:
[1,2,3,4]
输出:
6
说明:
最优方案是偷第 2,4 个房间示例2
输入:
[1,3,6]
输出:
7
说明:
最优方案是偷第 1,3个房间示例3
输入:
[2,10,5]
输出:
10
说明:
最优方案是偷第 2 个房间Rust 解法, 执行用时: 20ms, 内存消耗: 5280KB, 提交时间: 2022-04-21
struct Solution{ } impl Solution { fn new() -> Self { Solution{} } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ pub fn rob(&self, nums: Vec<i32>) -> i32 { // write code here let n = nums.len(); let mut a = 0i32; let mut b = 0i32; for i in 0..n { let tmp = b.max(a + nums[i]); a = b; b = tmp; } b } }
C++ 解法, 执行用时: 20ms, 内存消耗: 5664KB, 提交时间: 2022-08-02
const auto io_sync_off=[]() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int rob(vector<int>& nums) { // write code here vector<int> dp(nums.size() + 3); for (int i = nums.size() - 1; i >= 0; i--) dp[i] = nums[i] + max(dp[i+2], dp[i+3]); return max(dp[0], dp[1]); } };
C++ 解法, 执行用时: 21ms, 内存消耗: 5760KB, 提交时间: 2022-07-25
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: int rob(vector<int>& nums) { if(nums.size()==1) return nums[0]; vector<int>dp(nums.size()); dp[0]=nums[0]; dp[1]=max(nums[0],nums[1]); for(int i=2;i<nums.size();i++) dp[i]=max(dp[i-2]+nums[i],dp[i-1]); return dp[nums.size()-1]; } };
C++ 解法, 执行用时: 26ms, 内存消耗: 6524KB, 提交时间: 2022-02-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int rob(vector<int>& nums) { int size=nums.size(); int NoSteal=0; int Steal=nums[0]; int temp; for(int i=1;i<size;++i){ temp=NoSteal; if(NoSteal<Steal) NoSteal=Steal; Steal=temp+nums[i]; } return max(Steal,NoSteal); } };
C++ 解法, 执行用时: 27ms, 内存消耗: 5676KB, 提交时间: 2022-02-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int rob(vector<int>& nums) { // write code here int n = nums.size(); vector<int> dp(n + 1); dp[0] = 0; dp[1] = nums[0]; for(int i = 2; i <= n; i++){ dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1]); } return dp[n]; } };