Java 题解 | #不能连续吃草的牛II#

不能连续吃草的牛II

https://www.nowcoder.com/practice/0b6e9ca056eb4166b4bfd4f7c90b2c61

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int eatGrass (int[] nums) {
        // write code here
        if (nums.length == 0) return 0;
        if (nums.length == 1) return nums[0];
        int res1 = robRange(nums, 0, nums.length - 2);
        int res2 = robRange(nums, 1, nums.length - 1);
        return Math.max(res1, res2);
    }

    public int robRange(int[] nums, int start, int end) {
        if (start == end) return nums[start];
        int[] dp = new int[nums.length];
        dp[start] = nums[start];
        dp[start + 1] = Math.max(nums[start], nums[start + 1]);
        for (int i = start + 2; i <= end; i++) {
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[end];
    }
}
  • 编程语言:Java。
  • 考察的知识点:动态规划。
  • 代码的简短文字解释:maxGrass方法接受一个整数数组nums作为参数,并返回能够获得的最大草量。首先检查nums数组是否为空或长度为0,如果是则直接返回0。创建一个大小为n的动态规划数组dp,初始化dp[0]为第一块草地的草量。如果草地数量大于1,将dp[1]初始化为第一、第二块草地中草量较大的值。从第三块草地开始遍历,每次更新dp[i]为前两块草地中选择较大值的最大草量。返回dp[n-1],即为能够获得的最大草量。
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务