1. 栈 求众数(出现次数是大于n/2 )
双重循环遍历是对数组普适的办法,而方法的巧妙正在于一次遍历
wulinshan / 这里的c就是竞争力,帮派人数,也是出栈入栈的日常
摩尔投票法
2. 对栈的操作
----从对数组的操作转向,后面是Queue,Tree & Graph吧?而这些都是数据与数据的关系.
输入两个整数序列(int类型),第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
从题目到思路
通过手动模拟正确的出入栈操作得到思路:
遍历pop序列
,也就是正在测试的出栈序列:
- 如果要弹出的这个元素在栈顶⇒弹出
- 如果要弹出的这个不在栈顶,
- 按压入顺序将下一个压入,一直压到这个数字再弹出
- 如果压不到这个数字/压入弹出不对,说明出栈序列不对⇐翻译成code语言就是:
如果是空,就返回false;否则继续压入
从步骤到代码
- 输入:压栈顺序数组/出栈顺序数组/数组长度
- 输出:判断出栈顺序
- 参与方:
- 需要有一个judge栈:与pop序列中的元素比较,使得push序列中的元素出栈入栈然后判断
- 可以再多两个栈放入pop序列和push序列,然后按照pop序列的指示push入judge栈与judge栈再pop
- 过程中涉及到哪些辅助/标志的东西?
- 辅助标记把push栈哪些已经入了judge栈,下次从这里继续入—push_location
Code
另外看一下同样的思路可以表达的多么简洁…
究其原因,好吧不知道,不过可以积累这样简洁的表达,多看优秀代码,就像用成语表达一些描述一样.
3. 求回文不用stack和queue
4. 快速排序重新用栈写