题解 | #牛舍的占地面积# java

牛舍的占地面积

https://www.nowcoder.com/practice/4d9d9bf23d874688aee6fc1ac5bf6902

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param areas int整型一维数组
     * @return int整型
     */
    public int maxArea (int[] areas) {
        // write code here
// 预处理两边最近的比其大的位置
        int n = areas.length;
        int[] l = new int[n];
        int[] r = new int[n];
        Stack<Integer> stk = new Stack<>();

        for (int i = 0; i < n; i++) {
            while (!stk.isEmpty() && areas[stk.peek()] >= areas[i]) {
                stk.pop();
            }
            if (stk.isEmpty()) {
                l[i] = -1;
            } else {
                l[i] = stk.peek();
            }
            stk.push(i);
        }

        stk = new Stack<>();
        for (int i = n - 1; i >= 0; i--) {
            while (!stk.isEmpty() && areas[stk.peek()] >= areas[i]) {
                stk.pop();
            }
            if (stk.isEmpty()) {
                r[i] = n;
            } else {
                r[i] = stk.peek();
            }
            stk.push(i);
        }

        int res = 0;
        for (int i = 0; i < n; i++) {
            res = Math.max(res, (r[i] - l[i] - 1) * areas[i]);
        }
        return res;
    }
}

代码使用的编程语言是Java。

该题考察的知识点是利用栈(Stack)数据结构和数组进行区间计算。

maxArea方法用于计算给定整型数组 areas 中的最大面积。首先,创建了两个大小为 n 的整型数组 leftright,以及一个栈 stack,用于辅助计算。

利用栈来预处理每个位置的左侧和右侧最近比其大的位置,并将结果存储在数组 leftright 中。

使用循环来计算每个位置的最大面积,并将最大值存储在变量 maxArea 中。

将变量 maxArea 作为结果返回。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 15:08
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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