刷题记录

119 阅读2分钟

前言

每日一道,题解会放到我的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

image.png 代码实现

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}。

代码实现