题解 | #不能连续吃草的牛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]);
    }
}
#题解#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务