前言
每日一道,题解会放到我的git上,根据《程序员代码面试指南-左PDF》 ,电子版放到了下方,欢迎共同学习,为了财富自由 ~ _ ~
链接:https://pan.baidu.com/s/17APhJd9jTg2Bz6HTG1lseg
提取码:wnlr
后续我会慢慢完善
栈
1. 描述:设计一个有getMin功能的栈 p1
* 【题目】
* 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
* 【要求】
* 1.pop、push、getMin操作的时间复杂度为O(1)
* 2.设计的栈类型可以使用现成的栈结构
2. 由两个栈组成的队列 p5
* 【题目】
* 编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)
3. 由两个栈组成的队列 p5
* 【题目】
* 如何仅用递归函数和栈操作逆序一个栈 p8
* 【要求】
* 一个栈一次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,
* 从栈顶到栈底为1、2、3、4、5,
* 也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构
4. 猫鼠队列 p10
5. 用一个栈实现另一个栈的排序 p13
* 【题目】
* 一个栈中元素的类型为整形,现在想讲该栈从顶到底按从大到小的顺序排序,
* 只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据
* 结构。如何完成排序?
---最近有点懒更新晚了--
队列
6. 生成窗口最大值数组 p18
* 【题目】
* 有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边
* 滑一个位置。
* 例如,数组为[4,3,5,4,3,3,6,7],窗口大小为 3 时:
* [4 3 5] 4 3 3 6 7 窗口中最大值为 5
* 4 [3 5 4] 3 3 6 7 窗口中最大值为 5
* 4 3 [5 4 3] 3 6 7 窗口中最大值为 5
* 4 3 5 [4 3 3] 6 7 窗口中最大值为 4
* 4 3 5 4 [3 3 6] 7 窗口中最大值为 6
* 4 3 5 4 3 [3 6 7] 窗口中最大值为 7
* 如果数组长度为 n,窗口大小为 w,则一共产生 n-w+1 个窗口的最大值。
* 请实现一个函数。
* 输入:整型数组 arr,窗口大小为 w。 输出:一个长度为 n-w+1 的数组 res,res[i]表示每一种窗口状态下的最大值。
* 以本题为例,结果应该返回{5,5,5,4,6,7}。