剑指offer-栈的压入弹出序列21】的更多相关文章

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 解法 1:辅助栈 需要一个辅助栈,来模拟出入栈的过程.算法流程如下: 取压入队列的首元素,将其压入辅助栈 检查辅助栈顶元素是否和弹出队列的首元素相等: 若相等,则辅助栈弹出栈…
判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍然没有找到下一个弹出的数字,那么该序列不可能为弹出序列. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Solution { public:     bool IsPopOrder(vector<int> …
/************************************************************************* > File Name: 20_IsPopOrder.cpp > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月30日 星期二 19时53分19秒 *********************************************…
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的)   思路: 创建一个临时栈s,A序列依次压入s,每压入一个数,与B序列比较,如果想同,A出栈,B比较的元素后移一个.   AC代码: class Solution { public: boo…
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个栈是否为该栈的弹出顺序.假设压入栈的所有数字都不相等.例如序列1,2,3,4,5是某个栈的压入顺序,序列4,5,3,2,1是该栈序列的一个弹出序列,但是4,3,5,1,2就不是其弹出序列.(两序列长度相同) 思路:主要是栈的压入和弹出序列 借用大神链接: https://www.cnblogs.com/edisonchou/p/4779755.html 为此我们加入一个辅助栈,在将压入顺序矩阵依次压入辅助栈的同时,判断其栈顶元素是否…
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意:假设压栈序列的全部数字均不相等.  例如: 序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:出栈序列和入栈序列相等) 2.思路 定义一个辅助栈和两个变量.把第一个序列中的数字依次压入辅助栈,并…
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 栈的特点:先进后出 算法思路: 1.利用一个辅助栈来模拟压入和弹出的操作 2.对输入的序列的元素,先入栈,如果栈不为空,就查看栈顶元素和弹出序列的值是否相同,相同就把栈顶出栈,弹出序列的当…
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路 借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元…
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) class Solution: def IsPopOrder(self, pushV, popV): # write code here lenpushV=len(pushV) lenp…
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈序列对应的一个弹出序列,但4.3.5.1.2就不可能是该 该压栈序列的弹出序列. 这种判断其实只要掌握栈的先进后出原则,则不难解决. 本题的题解步骤如下: 1.设置一个辅助栈S,用于模拟出栈入栈顺序,设入栈顺序序列为pPush,出栈顺序序列为pPop 2.设置两个索引或指针分别指向入栈序列和出栈序列…
时间限制:1秒 空间限制:32768K 热度指数:300132 本题知识点: 栈 算法知识视频讲解 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) class Solution { public: bool IsPopOrder(ve…
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 分析: 给定一个栈的压入顺序,判断第二个序列是否可能为出栈顺序.我们可以按压入顺序将元素依次压入栈中,每压入一个元素,都来判断下当前栈顶元素和当前指向的弹出元素是否相同(开始时当前的弹出元…
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序. 如:假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列. 但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 解题思路: 建一个临时栈,将输入序列pushA[]的数据依次往栈中压,每进一个都跟popA[]中第一个位置的数比较, 若相同,则弹出,然后继续压入,同时跟popA[]第二个位置的数…
#include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> /* 题目: 输入两个整数序列,第一个序列1表示栈的压入顺序,第二个序列2表示栈的弹出顺序. 判断第一个栈是否可以以第二个序列的方式弹出. */ /* 思路: 设置一个辅助栈,遍历序列2. 若遍历到的序列2的元素与栈顶元素相同,则弹出栈,遍历下一个元素: 若遍历到的…
写的一个代码,虽然正确通过了,但我觉得会报vector越界的错误 class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int length1 = pushV.size(); int length2 = popV.size(); || length2 <= || length1 != length2) return false; stack<int> sta;…
剑指Offer--栈的java实现和栈的应用举例 栈是一种先进后出的数据结构, 栈的实现如下: 首先定义了栈需要实现的接口: public interface MyStack<T> { /** * 判断栈是否为空 */ boolean isEmpty(); /** * 清空栈 */ void clear(); /** * 栈的长度 */ int length(); /** * 数据入栈 */ boolean push(T data); /** * 数据出栈 */ T pop(); } 接下来定…
数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组. 今天我们介绍一下另一道来自<剑指Offer>的关于数组的面试题--不修改数组找出重复的数字. 不修改数组找出重复的数字 题目二:不修改数组找出重复的数字 给定一个长度为 n+…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改输入的数组.例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3. 思路 数组长度为n+1,而数字只从1到n,说明必定有重复数字.可以由二分查找法拓展:把1~n的数字从中间数字m分成两部分…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数).例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5.4-6和7-8. 思路 指针法: 类似(57-1) 和为s的两个数字的方法,用两个指针small和big分别代表序列的最大值和最小值.令small从1开始,big从2开始. 当从small到big的序列的和小…
数组中重复的数字 最近在复习算法和数据结构(基于Python实现),然后看了Python的各种"序列"--比如列表List.元组Tuple和字符串String,后期会写一篇博客介绍 数组 这一数据结构. 不过我们先来看<剑指Offer>中关于数组的一道面试题. 面试题3:数组中重复的数字 题目一:找出数组中重复的数字 给定一个长度为 n 的数组里的所有数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组…
查询  lrange list 0 1 // 注意0和1之间是空格:这个命令和pop命令不一样,不会删除里面的值lrange list 0 -1 // 所有的 下标查询 lpush person zs ls ww zllindex person 0 // zl,zl是第一个放入的,所以在最左边lindex person 1 // ww下标从0开始del person 删除 lpush person zs li zs li zs wwlrem person number zsnumber为0,删除…
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 题解一:使用栈操作 public static String ReverseSentence(String str) { /…
找到所有和为S的连续整数序列,序列长度>=2 我的思路:数学法,限定首元素范围,计算序列长度. 书上解法:用small和big两个游标记录序列的开始和结束位置,调整游标. 我的解法: /* ​直接用数学方法做的 等差数列公式 2*n*a1+n(n-1)/2 = s; 由n>= 2 得 a1 <= (s - 1)/2 对首位数字a1从1到 (s - 1)/2遍历 等差数列公式变形 n*n+(2*a1 - 1)n-2s = 0 可得 n = [-(2a - 1) + sqrt((2a - 1…
双指针问题.似曾相识. /* 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! */ class Solution { public: vector<vector<int> > FindCo…
1. 题目 2. 解答 定义两个指针,刚开始分别指向 1 和 2,求出位于这两个指针之间的元素和.如果和大于 S,前面的指针向后移直到和不大于 S 为止:反之,如果和等于 S,则此时两个指针之间的元素序列即为一个所求的结果,后面的指针向后移动. 第一个指针的范围为 \([1, \frac{S+1}{2})\),左闭右开,可举一个奇数偶数的例子即可知.时间复杂度为 \(O(n)\). class Solution { public: vector<vector<int> > Find…
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!   输入描述: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 分析: 假设 i,j 分别是第一个数…
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!   思路:滑动窗口(双指针)   import java.util.ArrayList; public class Solution { pub…
难度 题目 知识点 07. 斐波那契数列 递推递归 - 两变量写法- 08. 跳台阶 同上 09. 变态跳台阶 dp 10. 矩形覆盖 同上 05. 用两个栈实现队列 模拟 ☆ 20. 包含min函数的栈 栈 21. 栈的压入弹出序列 模拟出栈序列 65. 矩阵中的路径 回溯 66. 机器人的运动范围 dfs 求连通块大小 07 - 10 斐波那契数列 - 递推递归 - 两变量写法 07. 斐波那契数列 T7:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始…
<剑指Offer>是很多程序员面试前要看的书,但里面的算法都是基于C++实现的,最近用了三周左右时间,用Python完成了里面几乎所有的算法题,由于时间以及个人水平均有限,或许会有部分问题没有发现,希望大家发现后能指出,在此感谢大家!也希望我写的东西能对大家有一点帮助.所有源代码请在这里获取. Python-Offer的主要特点简介如下: 所有题目按照书中章节排列,便于查询: 每个题目单独一个文件,文件可以直接运行,便于测试以及查看结果: 作为2的补充,对于二叉树和单链表这种类型的题目,文件中…
一 斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 问题分析: 可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出.另外可以使用迭代法,用fn1和fn2保存计算过程中的结果,并复用起来.下面我会把两个方法示例代码都给出来并给出两个方法的运行时间对比. 示例代码: 采用迭代法: int Fibonacci(int number) { if (number <= 0…