题解 | #不能连续吃草的牛# java
不能连续吃草的牛
https://www.nowcoder.com/practice/64d9400c321042acb754a9455852a8d7
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int eatGrass (int[] nums) { // write code here int n = nums.length; if (n == 1) return nums[0]; if (n == 2) return Math.max(nums[0], nums[1]); int[] f = new int[n]; f[0] = nums[0]; f[1] = Math.max(nums[0], nums[1]); for (int i = 2; i < n; ++i) { f[i] = Math.max(f[i - 1], f[i - 2] + nums[i]); } return f[n - 1]; } }
代码使用的编程语言是Java。
该题考察的知识点是动态规划(Dynamic Programming)。
代码的解释如下:
eatGrass
方法用于计算在给定的一维整型数组nums
中吃草的最大数量。- 首先,获取给定数组的长度
n
。 - 如果数组长度为 1,直接返回数组中的唯一元素。
- 如果数组长度为 2,返回数组中较大的元素。
- 创建一个长度为
n
的整型数组f
,用于存储动态规划的结果。初始化f[0]
为数组中第一个元素,f[1]
为数组中前两个元素的最大值。 - 从下标 2 开始循环遍历数组,对于每个下标
i
,计算出当吃到第i
根草时的最大数量。这个最大数量是在上一次和上上次吃草结果中选择较大的那个值加上当前草的数量。 - 最后,返回数组中最后一个元素
f[n-1]
,即吃草的最大数量。