花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)

题目要求

P1165题目链接

在这里插入图片描述
在这里插入图片描述

分析

标准的栈结构,但使用数组来模拟会更简单。
因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了。
毕竟,出栈也不需要返回当前真实值。
另外,我们只使用懒惰删除,不真实去除。
还有就是模仿C语言的方式,开大数组,避免扩增数组。

这正是具体问题具体分析为解决问题带来的方便之处。

输入数据很大,如果不用BufferedReader就会T掉三个点。

AC代码(Java语言描述)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        int[] f = new int[200001];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(reader.readLine()), tempNum, pointer = 0;
        String tempStr;
        for (int i = 0; i < num; ++i) {
            tempStr = reader.readLine();
            switch (tempStr.charAt(0)) {
                case '0':
                    f[++pointer] = Math.max(f[pointer-1], Integer.parseInt(tempStr.substring(2)));
                    break;
                case '1':
                    if (pointer > 0) {
                        --pointer;
                    }
                    break;
                default:
                    System.out.println(f[pointer]);
                    break;
            }
        }
        reader.close();
    }
}
发布了717 篇原创文章 · 获赞 1513 · 访问量 69万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104851980