题目考察的知识点是:
动态规划。
题目解答方法的文字分析:
环状排列意味着第一块草料和最后一块草料中只能选择一个吃,因此可以把此环状排列化为两个单排排列子问题。先计算第一块草料的数值,然后计算最后一块草料的数值,最后将两个数值相加即可。
本题解析所用的编程语言:
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]);
}
}

京公网安备 11010502036488号