Java 题解 | #不能连续吃草的牛II#
不能连续吃草的牛II
https://www.nowcoder.com/practice/0b6e9ca056eb4166b4bfd4f7c90b2c61
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int eatGrass (int[] nums) { // write code here if (nums.length == 0) return 0; if (nums.length == 1) return nums[0]; int res1 = robRange(nums, 0, nums.length - 2); int res2 = robRange(nums, 1, nums.length - 1); return Math.max(res1, res2); } public int robRange(int[] nums, int start, int end) { if (start == end) return nums[start]; int[] dp = new int[nums.length]; dp[start] = nums[start]; dp[start + 1] = Math.max(nums[start], nums[start + 1]); for (int i = start + 2; i <= end; i++) { dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]); } return dp[end]; } }
- 编程语言:Java。
- 考察的知识点:动态规划。
- 代码的简短文字解释:maxGrass方法接受一个整数数组nums作为参数,并返回能够获得的最大草量。首先检查nums数组是否为空或长度为0,如果是则直接返回0。创建一个大小为n的动态规划数组dp,初始化dp[0]为第一块草地的草量。如果草地数量大于1,将dp[1]初始化为第一、第二块草地中草量较大的值。从第三块草地开始遍历,每次更新dp[i]为前两块草地中选择较大值的最大草量。返回dp[n-1],即为能够获得的最大草量。