实现一个Min栈——题集(六)
来源:互联网 发布:ppt转pdf软件在线 编辑:程序博客网 时间:2024/06/04 20:03
实现一个Min栈——题集(六)
今天分享一下,实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) ,查找一个字符串中第一个只出现两次的字符以及计算一个整数二进制位中1的个数。
实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。
原代码如下:
#include<iostream>using namespace std;#include<stack> //实现一个栈Stack返回最小值的时间复杂度为O(1)template<class T>class StackMin{public:StackMin(){} StackMin(T val){_s.push(val);_min.push(val);} ~StackMin(){} void Push(T val){_s.push(val);if(Empty()|| (val <= _min.top()))_min.push(val); } void Pop(){if(Empty())return;if(_s.top() <= _min.top()){_min.pop();}_s.pop();} T Top(){if(Empty())return NULL;return _s.top();} bool Empty(){return (_s.empty())||(_min.empty());} T Min(){if(Empty())return NULL;return _min.top();}protected:stack<T> _s;stack<T> _min;}; void TestStackMin(){//实现一个栈Stack返回最小值的时间复杂度为O(1)cout<<"实现一个栈Stack返回最小值的时间复杂度为O(1)"<<endl;StackMin<int> s;cout<<"Stack<int> s->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(11);cout<<"s.push(11)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(6);cout<<"s.push(6)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(3);cout<<"s.push(3)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(9);cout<<"s.push(9)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(3);cout<<"s.push(3)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Push(1);cout<<"s.push(1)->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl; s.Pop();cout<<"s.pop()->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Pop();cout<<"s.pop()->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Pop();cout<<"s.pop()->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Pop();cout<<"s.pop()->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;s.Pop();cout<<"s.pop()->s.Min(): "<<s.Min()<<"; s.Empty(): "<<s.Empty()<<"; s.Top(): "<<s.Top()<<endl;cout<<endl;} int main(){TestStackMin();//实现一个栈Stack返回最小值的时间复杂度为O(1)system("pause");return 0;}
运行界面:
查找一个字符串中第一个只出现两次的字符的源代码和运行结果。
比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)。
原代码如下:
#include<iostream>using namespace std;#include<string> char Siglechar(string & tmp)//快慢指针{int size=tmp.size(); int j=0;for(int i=1; i<size; i++){if(j!=i && tmp[j] == tmp[i]){j++;i=-1;}} char sigle=tmp[j];return sigle;} int main(){string tmp="cacn yonu see mea!";cout<<"tmp: "<<tmp.c_str()<<" -> "<<Siglechar(tmp)<<endl;system("pause");return 0;}
运行界面:
计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
原代码如下:
#include<iostream>using namespace std;#include<string> int count1(int val){//数在计算机中以补码的形式存在//优化int count=0;if(val <0){//负数去掉符号val=~val+1;} while(val!=0){count++;val&=val-1;//位于本身减1的数可以每次去掉一个1} return count;} int main(){cout<<"输出数字中1的个数"<<endl;cout<<"count1(7): "<<count1(7)<<endl;cout<<"count1(-7): "<<count1(-7)<<endl;cout<<"count1(-1): "<<count1(-1)<<endl;cout<<"count1(9): "<<count1(9)<<endl;cout<<"count1(127): "<<count1(127)<<endl;cout<<"count1(-128): "<<count1(-128)<<endl; system("pause");return 0;}
运行界面:
分享如上,如有错误,望斧正!愿大家学得开心,共同进步!
阅读全文
0 0
- 实现一个Min栈——题集(六)
- Min Stack 实现一个最小栈
- [LeetCode-155] Min Stack(设计一个 min 函数栈)
- 栈-Min Stack(实现一个栈,用常数级时间找出栈中的最小值)
- 实现一个栈,要求pop,push,Min,时间复杂度为O(1)
- 实现一个包含Min,Max函数的栈
- 实现一个带有取最小值min方法的栈
- 10min实现一个简易图片查看器(触类旁通)
- min栈实现
- LeetCode 之 Min Stack — C++ 实现
- 实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 剑指offer——定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 如何实现一个文件系统(六)
- 实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 9.2链表(六)——给定一个有环链表,实现一个算法返回环路的开头结点
- 带MIN函数的栈实现(push pop min 操作都只花O(1))
- 155.Min Stack(求一个栈中的最小元素)
- Min-Min算法实现
- centos7下php安装Redis扩展
- arttemplate 函数使用有感
- Android-socket的基本使用,发送文字和图片以及心跳
- Linux基础(一)(1)
- python中的selenium中的鼠标悬停事件!
- 实现一个Min栈——题集(六)
- Android 多个listview监听item的点击事件
- Hbase安装
- 小米手机的坑
- 如何巧用Android多进程,你不知道的点全总结!微信,微博等主流App都在用
- 主流开源深度学习框架对比分析
- {loop $tags $k $t} destoon入门简单问题
- Spring LDAP连接方式
- 禁用myeclipse updating indexes