要用java好好刷题哦
参考书A《剑指offer》 书B《程序员面试经典》
设计题
熟悉集合Stack Queue PriotyQueue的方法
1.A、B公共题包含min函数的栈
分析:
普通栈求min()的复杂度是O(N),满足O(1)的要求必须引入一个辅助栈,对主栈进行每一步操作时,更新辅助栈,使得辅助栈的栈顶都是当前主栈的最小值。
注意:Java包装类Integer比较值要用equals
2.数据流的中位数
重要重要重要!!!
分析:始终维护一个最大堆和一个最小堆,及时更新堆顶
保证元素数量为偶数时 中位数为 二者堆顶的平均值
元素数量为奇数时 中位数为最大堆的堆顶值
3.剑指 Offer 09. 用两个栈实现队列
分析:两个栈,需要一个辅助栈输出队列首元素。主栈完成基础的入队操作,需要元素出队列时,若辅助栈为空,将主栈元素依次存入辅助栈,否则不操作主栈元素,辅助栈的栈顶元素即为队列的队首元素。
注意:字符串的相关操作用StringBuilder类,它是线程不安全的,比StringBuffer快。