修改栈,使得能O(1)的求出栈里最大的数和最小的数
来源:互联网 发布:网络日语教师招聘 编辑:程序博客网 时间:2024/05/16 04:43
思路:
首先,建立3个栈,dataStack , minStack , maxStack 。
这里只说如何求出最小元素。
1.push() 将k插入dataStack中,如果minStack中没有数,则加入k;如果k比minStack.top()小,也加入k;否则对minStack不做操作。
2.pop() 如果两个栈的头元素相同,则一起取出;若不相同,则只取出dataStack。
3.min() 最小元素为minStack.top()
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <iostream>#include <stack>using namespace std;class STack{private: stack<int> dataStack; stack<int> minStack; stack<int> maxStack;public: void push(int k) { dataStack.push(k); if(minStack.empty()) { minStack.push(k); } if(maxStack.empty()) maxStack.push(k); else if(k<minStack.top()) { minStack.push(k); } else if(k>maxStack.top()) maxStack.push(k); } void pop() { if(dataStack.top() == minStack.top()) { minStack.pop(); } if(dataStack.top() == maxStack.top()) maxStack.pop(); dataStack.pop(); } int min() { return minStack.top(); } int max() { return maxStack.top(); }};int main(){ STack s; s.push(4); s.push(3); s.push(7); s.push(5); s.push(6); s.push(10); s.push(1); for(int i=0;i<7;i++) { printf("min:%d\n",s.min()); printf("max:%d\n",s.max()); s.pop(); } return 0;}
0 0
- 修改栈,使得能O(1)的求出栈里最大的数和最小的数
- 求出最大数和最小数的最大公约数
- 华为2014年机试题1 (输入1--50个数字,求出最小数和最大数的和 )
- 华为2014年机试题【输入1--50个数字,求出最小数和最大数的和】
- 华为2014机考题:输入1--50个数字,求出最小数和最大数的和
- 探讨int和unsigned能表示的最大的数和最小的数
- 探讨int和unsigned能表示的最大的数和最小的数
- O(1)时间求出栈中最小的元素
- 求最小的数和最大的数sample
- 函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a[0]中的数对调,次最小数和a[1]中的数对调。
- 同时寻找最大数和最小数的最优算法
- 同时寻找最大数和最小数的最优算法
- 五个数的分离最大最小数
- mac修改进程能打开的最大文件数
- 数组中的数分为两组,使得两个组的和的差的绝对值最小
- 期盼中求出起点到终点的最小步数
- 从数组中找出最大的和最小的数
- 求出数组中相邻三个数之和最大的~
- 判断 数据表中字段是否存在
- PHP的GD 支持和加载MySQL功能
- POJ 1743Musical Theme(后缀数组+不可重叠最长子串)
- getopt和getopt_long函数使用详解
- Maven学习记录2——Mac maven、jdk环境变量配置
- 修改栈,使得能O(1)的求出栈里最大的数和最小的数
- 如何判断手机是否获得root权限
- SBJSON的使用
- Linux程序设计(第2版)
- Tomcat等应用启动脚本中的-D参数 [java的系统参数传递]
- 项目三 递归汉诺塔
- AIX常用
- EAP认证
- 编程之美1.2中国象棋将帅问题