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

不能连续吃草的牛

https://www.nowcoder.com/practice/64d9400c321042acb754a9455852a8d7

知识点:动态规划

思路:

  1. 首先,定义一个名为eatGrass的静态方法,该方法接受一个整数数组作为参数,并返回一个整数。
  2. 定义一个常量INF,表示无穷大的值,这里使用0x3f3f3f3f表示。
  3. 获取整数数组nums的长度n
  4. 创建一个二维整数数组f,其大小为(n + 1) × 2,用于记录状态。
  5. 初始化f[0][0]为0,表示未偷窃当前房间时的累计价值为0。
  6. 使用一个for循环,从1到n遍历整数数组nums,并更新状态数组f
  7. 对于每个位置i,考虑两种情况:如果不偷窃当前房间,则累计价值为前一个房间的最大累计价值,即f[i - 1][0]和f[i - 1][1]中的较大值。如果偷窃当前房间,则累计价值为f[i - 1][0]加上当前房间的价值nums[i - 1]。
  8. 更新状态数组f[i][0]f[i][1]的值。
  9. 循环结束后,返回f[n][0]f[n][1]中的较大值作为最终的结果。
  10. main方法中,创建一个示例用法,将一个整数数组作为参数传递给eatGrass方法,并打印出能够吃到的最大草量。

编程语言:java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public static int eatGrass(int[] nums) {
        final int INF = 0x3f3f3f3f;

        int n = nums.length;
        int[][] f = new int[n + 1][2];

        f[0][0] = 0;
        for (int i = 1; i <= n; i++) {
            f[i][0] = Math.max(f[i - 1][0], f[i - 1][1]);
            f[i][1] = f[i - 1][0] + nums[i - 1];
        }

        return Math.max(f[n][0], f[n][1]);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务