【九度】题目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中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重