华为2022.4.6笔试第3题单调栈改编

// 高度全是正数的柱子n个,m是货物的长度,货物的高度是1,请问在柱子覆盖的空间中
// 最多放几个货物
// 样例
// 2 6
// 2 4 4 2 4 4
public class S2 {
    public static void main(String[] args) {
        int m,n;
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        n = sc.nextInt();
        int[] h = new int[n+10];
        for (int i=1;i<=n;i++){
            h[i] = sc.nextInt();
        }
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        stack.push(1);
        int ans = 0;
        for (int i=2;i<=n+1;i++){
            while (stack.size()>1 && h[i]<h[stack.peek()]){
                int index = stack.pop();
                int lastindex = stack.peek();
                int maxh = Math.max(h[lastindex],h[i]);
                int heightdiff = h[index] - maxh;
                int l = i - lastindex -1 ;
                ans+= (l/m)*(heightdiff);
            }
            stack.add(i);
        }
        System.out.println(ans);
    }
}

#华为笔试##实习#
全部评论
大哥,你这样例都是错的呀,算法更不对了🙄
点赞 回复 分享
发布于 2022-04-14 21:12
同4.6号笔试,你收到面试通知了吗
点赞 回复 分享
发布于 2022-04-19 13:00

相关推荐

4 13 评论
分享
牛客网
牛客企业服务