- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
class Stack
{
public:
void Push(int val)
{
s.push(val);
if(minstack.empty())
{
minstack.push(val);
}
else
{
int min = val > minstack.top() ? minstack.top():val;
minstack.push( min );
}
}
void Pop()
{
assert(!s.empty());
assert(!minstack.empty() );
s.pop();
minstack.pop();
}
int Min()
{
assert(!minstack.empty());
return minstack.top();
}
private:
stack<int> minstack;
stack<int> s;
};
- 查找一个字符串中第一个只出现两次的字符
比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
char FirstTwoChar(const char *str)
{
assert(str);
char array[256] = { 0 } ;
const char *pcur = str;
while(*pcur)
{
array[ *pcur ]++;
pcur++;
}
pcur = str;
while(*pcur)
{
if(array[*pcur] == 2)
return *pcur;
pcur++;
}
return 0;
}