【九度】题目1522:包含min函数的栈

2024-08-25 12:38
文章标签 函数 题目 min 九度 1522

本文主要是介绍【九度】题目1522:包含min函数的栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目地址:http://ac.jobdu.com/problem.php?pid=1522
题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。

输出:

对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

样例输入:
7
s 3
s 4
s 2
s 1
o
o
s 0
样例输出:
3
3
2
1
2
3
0

栈是先进后出的数据结构。
实现求最小值,如果直接思考,暴力搜索,可能比较耗时。
还需要随时考虑数据弹出和压入。
我们换一种思路,用两个栈来做数据操作。
一个是基本栈,只包含数据,不需要比较大小。
另一类是包含最小数的栈。这个栈包含的最小值是当前数中的最小值。
我们将这两个栈声明为numStack和minStack。
如果要压栈,先将数据压入numStack,压入minStack判断一下,当前栈是否为空,
如果为空,直接压栈,否则就判断栈顶元素和当前元素的大小,将min压入栈。
然后输出minStack的栈顶元素即是当前元素中的最小值。
如果要弹出,判断numStack是否为空,为空直接输出null。
否则numStack和minStack弹出元素,然后判断栈是否空,不空就输出minStack的栈顶元素,否则就输出null。
针对题目来说一下。
操作 numStack minStack
s 3       3                 3
s 4       4                 3
s 2       2                 2
s 1       1                 1
o        pop 1     pop 2
o        pop 2     pop 2
s 0        0                0
保持两个栈长度一致,不管是弹出还是压入,二者都需要同时操作。
C++ AC

#include <stdio.h>
#include <stack>   
#include <string.h>
#include <string>
using namespace std; 
int n,i; int main(){while(scanf("%d",&n) != EOF){stack<int> numStack;stack<int> minStack;for(i = 0; i < n; i++){char operate[2];scanf("%s",operate);if(operate[0] == 'o'){if(numStack.empty()){printf("NULL\n");}else{numStack.pop();minStack.pop();if(minStack.empty()){printf("NULL\n");}else{printf("%d\n",minStack.top());}}}else{int k;scanf("%d",&k);numStack.push(k);if (minStack.empty()) {minStack.push(k);}else {if (k < minStack.top()) {minStack.push(k);}else {minStack.push(minStack.top());}} printf("%d\n",minStack.top());}}}return 0;
} /**************************************************************Problem: 1522User: wangzhenqingLanguage: C++Result: AcceptedTime:20 msMemory:1052 kb
****************************************************************/

Java AC

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Stack;public class Main {/** 1522*/public static void main(String[] args) throws Exception {StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));while (st.nextToken() != StreamTokenizer.TT_EOF) {int n = (int) st.nval;Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();for (int i = 0; i < n; i++) {st.nextToken();String a = st.sval;if (a.equals("o")) {if (stack1.isEmpty()) {System.out.println("NULL");}else {stack1.pop();stack2.pop();if (stack2.isEmpty()) {System.out.println("NULL");}else {System.out.println(stack2.peek());}}}else if (a.contains("s")) {st.nextToken();int tempNum = (int) st.nval;stack1.push(tempNum);if (stack2.isEmpty()) {stack2.push(tempNum);}else {if (tempNum < stack2.peek()) {stack2.push(tempNum);}else {stack2.push(stack2.peek());}}System.out.println(stack2.peek());}}}}
}
/**************************************************************Problem: 1522User: wangzhenqingLanguage: JavaResult: AcceptedTime:880 msMemory:27384 kb
****************************************************************/

这篇关于【九度】题目1522:包含min函数的栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105579

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N