题解 | #不能连续吃草的牛II#
不能连续吃草的牛II
https://www.nowcoder.com/practice/0b6e9ca056eb4166b4bfd4f7c90b2c61
题目考察的知识点是:
动态规划。
题目解答方法的文字分析:
环状排列意味着第一块草料和最后一块草料中只能选择一个吃,因此可以把此环状排列化为两个单排排列子问题。先计算第一块草料的数值,然后计算最后一块草料的数值,最后将两个数值相加即可。
本题解析所用的编程语言:
java语言。
完整且正确的编程代码:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int eatGrass (int[] nums) { // write code here if (nums.length == 1) { return nums[0]; } if (nums.length == 2) { return Math.max(nums[0], nums[1]); } int[] eatFirst = new int[nums.length]; int[] eatLast = new int[nums.length]; eatFirst[0] = nums[0]; eatFirst[1] = Math.max(nums[0], nums[1]); eatLast[0] = 0; eatLast[1] = nums[1]; for (int i = 2; i < nums.length - 1; i++) { eatFirst[i] = Math.max(eatFirst[i - 1], eatFirst[i - 2] + nums[i]); eatLast[i] = Math.max(eatLast[i - 1], eatLast[i - 2] + nums[i]); } int n = nums.length - 1; eatFirst[n] = eatFirst[n - 1]; eatLast[n] = Math.max(eatLast[n - 1], eatLast[n - 2] + nums[n]); return Math.max(eatFirst[n], eatLast[n]); } }#题解#