php实现
<?php function rob(array $nums) { $n = count($nums); if ($n === 0) return 0; if ($n === 1) return $nums[0]; $dp = [$nums[0], max($nums[0], $nums[1])]; for ($i = 2; $i < $n; $i++) { $dp[$i % 2] = max($dp[($i - 1) % 2], $nums[$i] + $dp[($i - 2) % 2]); } return $dp[($n - 1) % 2]; } // 测试数组 $nums = [2, 7, 9, 3, 1]; echo rob($nums); // 输出应为 12 ?>
js实现
function rob(nums) { const n = nums.length; if (n === 0) return 0; if (n === 1) return nums[0]; let dp = [nums[0], Math.max(nums[0], nums[1])]; for (let i = 2; i < n; i++) { dp[i % 2] = Math.max(dp[(i - 1) % 2], nums[i] + dp[(i - 2) % 2]); } return dp[(n - 1) % 2]; } // 测试数组 console.log(rob([2, 7, 9, 3, 1])); // 输出应为 12
网友回复