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

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务