每日一题---day7
2018-01-28 16:28
141 查看
基础题:
实现一个栈Stack,要求Push(出栈)、Pop(入栈),Min(返回最小值的操作)的时间复杂度为O(1)
代码:#include<stack>
template<class T>
class Stack
{
public:
void Push(T x)
{
if(min.empty())
{
min.push(x);
s.push(x);
}
else
{
if( x < min.top())
{
min.pop();
min.push(x);
}
s.push(x);
}
}
void Pop()
{
if(s.top() == min.top())
{
min.pop();
}
s.pop();
}
T Top()
{
return s.top();
}
T Min()
{
if(!min.empty())
return min.top();
}
bool Empty()
{
return s.empty();
}
private:
stack<T> s;
stack<T> min;
};
附加题
查找一个字符串中第一个只出现两次的字符,比如:“abcdefabcdefabc”,中第一个只出现两次的字符为‘d’,要求时间复杂度为O(N),空间复杂度O(1)
实现一个栈Stack,要求Push(出栈)、Pop(入栈),Min(返回最小值的操作)的时间复杂度为O(1)
代码:#include<stack>
template<class T>
class Stack
{
public:
void Push(T x)
{
if(min.empty())
{
min.push(x);
s.push(x);
}
else
{
if( x < min.top())
{
min.pop();
min.push(x);
}
s.push(x);
}
}
void Pop()
{
if(s.top() == min.top())
{
min.pop();
}
s.pop();
}
T Top()
{
return s.top();
}
T Min()
{
if(!min.empty())
return min.top();
}
bool Empty()
{
return s.empty();
}
private:
stack<T> s;
stack<T> min;
};
附加题
查找一个字符串中第一个只出现两次的字符,比如:“abcdefabcdefabc”,中第一个只出现两次的字符为‘d’,要求时间复杂度为O(N),空间复杂度O(1)
相关文章推荐
- c++ 每日一练 day7
- 何凯文每日一句打卡||DAY7
- 每日CTF--逆向---4
- Visual Studio 2008 每日提示(十九)
- CSS3之绽放的花朵(网页效果--每日一更)
- 【陀螺财经】数字货币每日行情简报0209
- Visual Studio 2008 每日提示(二十二)
- [每日练习]面试题--将一个有序数组转化为二叉排序树
- 【每日安全资讯】宾夕法尼亚州想要更安全的纸质投票机但目前还买不起
- Visual Studio 2008 每日提示(二十六)
- 每日总结 - Android TextView文字底部或者中间 加横线
- 【每日安全资讯】加密消息应用 Signal 项目宣布成立基金会
- Visual Studio 2008 每日提示(二十九)
- 每日一记--2014.10.11(2)
- 【每日新闻】中国研发开支2017年达到1.76万亿元 | 全球用户可在阿里云上选用红帽企业Linux
- 每日IN语(2009-02-03)本人的收入象出纳的帐
- [每日练习]堆排序
- webpack 学习 第4天,webpack 每日一练
- 200902 每日一句(By foreveryday007)
- 每日一博