算法--可查询最值的栈练习题

转载请标明出处http://www.cnblogs.com/haozhengfei/p/68c25fbc949e663f5bb8627a764158f8.html


可查询最值的栈练习题

可查询最值的栈练习

第2节 可查询最值的栈练习题

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

Java (javac 1.7)

代码自动补全

1

import java.util.Stack;

2


3

public class Solution {

4

    private Stack<Integer> stackData = new Stack<>();

5

    private Stack<Integer> stackMin = new Stack<>();

6


7

    public void push(int node) {

8

        //将当前元素压入栈

9

        stackData.push(node);

10


11

        /**

12

         * 如果最小栈为空,那么直接压入

13

         * 否则如果当前元素小于stackMin的顶部元素,直接压入,大于就继续压入stackMin的顶部元素

14

         */

15

        if(stackMin.isEmpty()){

16

            stackMin.push(node);

17

        } else {

18

            if (node < stackMin.peek().intValue()) {

19

                stackMin.push(node);

20

            }

21

            else{

22

                stackMin.push(stackMin.peek());

23

            }

24

        }

25

    }

26


27

    public void pop() {

28

        stackData.pop();

29

        stackMin.pop();

30

    }

31


32

    public int top() {

33

        return stackData.peek();

34


35

    }

36


37

    public int min() {

38

        return stackMin.peek();

39

    }

40

}

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

运行

时间: 2024-11-08 04:57:30

算法--可查询最值的栈练习题的相关文章

单调栈练习题题解

单调栈 单调栈顾名思义就是让栈中的元素是单调的,要么递增,要么递减.同样它也满足栈的性质,先进后出. 单调递增栈,则从栈顶到栈底的元素是严格递增的 单调递减栈,则从栈顶到栈底的元素是严格递减的 练习题 单调栈 练习题 POJ3250 POJ2796 BZOJ1113 HDU1506 POJ2559 JDFZ2997 POJ3250 POJ3250传送门 对于每一个牛来说,能看到的数目为向右数身高比它小的个数,累加就是答案. 所以可以倒着维护一个单调递增的栈,记录i之前的弹栈数目,累加. (正着也

算法学习 - 后缀表达式 (C++ 栈实现)

后缀表达式就是把一个式子进行树的后序遍历.然后根据这个顺序来求值. 栈来实现的时候很简单. 例如中缀表达式:6 * [ 5 + ( 2 + 3 )  * 8 + 3 ] 则 后缀表达式为:6 5 2 3 + 8 * + 3 + * 下面上代码: // // main.cpp // postfixExpression // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #inc

数据结构实验:计算表达式的值--顺序栈

实验题目:栈的应用-算术表达式求值 实验环境:    Visual C++ 6.0                   实验目的 : 1 .掌握栈的定义及实现: 2 .掌握利用栈求解算术表达式的方法. 实验内容: 通过修改完善教材中的算法3.4,利用栈来实现算术表达式求值的算法.对算法3.4中调用的几个函数要给出其实现过程: (1) 函数In(c):判断c是否为运算符: (2) 函数Precede(t1,t2):判断运算符t1和t2的优先级: (3) 函数Operate(a,theta,b):对

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

C# winform窗体设计-查询单个值

查询单个值主要用于对成绩最低分,最高分,学生总数,学生性别等信息的统计 在查询单个值的时候用到了ExecuteScalar方法,连接以及语句方面,以及思路和对数据的增删改差不多 下面请看一段代码: string s = "server=.;database=SampleDb;Integrated Security=True"; SqlConnection c = new SqlConnection(s); c.Open(); SqlCommand command = new SqlCo

NYOJ35 表达式求值 【栈】

表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:"1+2/4=",程序就输出1.50(结果保留两位小数) 输入 第一行输入一个整数n,共有n组测试数据(n<10). 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以"

1113: 零起点学算法20——输出特殊值II

1113: 零起点学算法20--输出特殊值II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 2078  Accepted: 1622[Submit][Status][Web Board] Description 输出\n Input 无 Output 输出\n(换行) Sample Output \n Source 零起点学算法 1 #include<stdio.h> 2 int main()

mysql查询字段值为数字

原文:mysql查询字段值为数字 我想查询字段值为数字的sql如下:select * from tj_item_result where tj_value REGEXP '^[0-9]'

mysql5日期类型datetime查询范围值

1.DATE_FORMAT函数 SELECT a.create_time FROM account_log a WHERE a.create_time >= DATE_FORMAT('2014-05-10 00:00:00','%Y-%m-%d %H:%i:%s') AND a.create_time <= DATE_FORMAT('2014-05-25 23:59:59','%Y-%m-%d %H:%i:%s') 2.STR_TO_DATE函数 SELECT a.create_time FR