栈和队列
lark_ying
清醒时工作,糊涂时读书,独处时思考,烦恼时睡觉~
展开
-
剑指offer 59-滑动窗口的最大值&队列的最大值 C++
题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,原创 2020-05-26 20:47:46 · 177 阅读 · 0 评论 -
剑指offer 58-翻转单词顺序 C++
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路1:借用辅助栈,遇到空格就截取字符串,压入栈中,再依次从栈顶弹栈组成新的字符串。以空间换时间 class Solution { pu原创 2020-05-26 16:00:23 · 259 阅读 · 0 评论 -
剑指offer 31-栈的压入、弹出序列 C++
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路:借助辅助栈,把输入的第一个序列中的数字一次压入栈,并按照第二个序列的顺序依次从该栈中弹出数字。 1)若下一个弹出的数字刚好是栈顶元素,则直接弹出; 2)若下一个弹出的数字 不在栈顶,则把压栈序原创 2020-05-25 18:42:51 · 246 阅读 · 0 评论 -
剑指offer 30-包含min函数的栈 C++
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 【注意两种实现的区别:】 思路1:用两个栈实现,一个栈s1用来存储原值,一个辅助栈s2用来存储当前栈中的min。基本实现: 1)若s2为空,则value入栈; 2)若s1.top()<value,则将s1.top()压入s2栈中; 3)每次弹栈时,s1和s2都要弹栈。 class Solution {原创 2020-05-25 16:18:39 · 128 阅读 · 0 评论 -
剑指offer 9-用两个栈实现队列&用两个队列实现栈 C++
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:栈——先进后出;队列——先进先出 1、若s2不为空,则返回顶部元素; 2、若s2为空,s1不为空,则将s1元素出栈到s2中,返回s2顶部元素; 2、若s2为空,s1也为空,则返回-1. class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty原创 2020-05-25 15:44:40 · 116 阅读 · 0 评论