用两个栈来实现一个队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
class Solution
{
public:
void push(int node) { //将所有数据存储在stack1后再加入新元素
while(!stack2.empty())
{
int temp=stack2.top();
stack1.push(temp);
stack2.pop();
}
stack1.push(node);
}
int pop() { //将所有数据存储在stack2后再输出数据
while(!stack1.empty())
{
int temp=stack1.top();
stack2.push(temp);
stack1.pop();
}
int s=stack2.top();
stack2.pop();
return s;
}
private:
stack<int> stack1;
stack<int> stack2;
};
旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.empty()) return 0;
int a=0; //记录要旋转的位数
int num=rotateArray[0];//记录最小值
for(size_t i=1;i<rotateArray.size();i++)
{
if(rotateArray[i]<num)
{
num=rotateArray[i];
a++;
}
}
for(int i=0;i<a;i++)
{
rotateArray.push_back(rotateArray[i]);//将数组前面要旋转的数存到数组后面
}
while(a!=0) //删除数组前面要旋转的数
{
vector<int> *curr = &rotateArray;
curr->pop_back();
a--;
}
return num; //返回最小值
}
};