剑指offer 计划1(栈与队列)---java
1.1、题目1
剑指 Offer 09. 用两个栈实现队列
1.2、解法
解法如题目所说。定义两个栈。这里假设第一个栈为a,第二个栈为b。
实现两个函数增加尾和删除头。
增加即直接push入第一个栈。
删除函数:通过判断a是否为空进行循环,将已经存入的a的栈顶pop存到b中,以此达到倒置的效果。
再将b的栈顶pop出来即可达到删除。
此时a栈为空,下次判断若b栈为空,则输出-1。
否则则继续通过b栈输出栈顶。
1.3、代码
class CQueue {
Deque<Integer> a;
Deque<Integer> b;
public CQueue() {
a = new LinkedList<Integer>();
b = new LinkedList<Integer>();
}
public void appendTail(int value) {
a.push(value);
}
public int deleteHead() {
if(b.isEmpty()){
while(!a.isEmpty()){
b.push(a.pop());
}
}
if(b.isEmpty()){
return -1;
}else{
return (int)b.pop();
}
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
2.1、题目2
剑指 Offer 30. 包含min函数的栈
2.2、解法
仍是通过两个栈的方式,第一个栈为d1,第二个栈为d2
d1的push、pop、top不受影响。
至于d2,push时需将d2栈顶元素与目前元素判断,若大于或者等于,则存进d2
pop时,若d2栈顶元素与d1 pop的元素相同,则共同pop
此时d2的栈顶为最小值。
2.3、代码
class MinStack {
Deque<Integer> d1,d2;
/** initialize your data structure here. */
public MinStack() {
d1 = new LinkedList<Integer>();
d2 = new LinkedList<Integer>();
}
public void push(int x) {
d1.push(x);
if(d2.isEmpty()||d2.peek()>=x){
d2.push(x);
}
}
public void pop() {
if(d1.pop().equals(d2.peek())){
d2.pop();
}
}
public int top() {
return (int)d1.peek();
}
public int min() {
return (int)d2.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.min();
*/
剑指offer 计划1(栈与队列)---java的更多相关文章
- 《剑指offer》-双栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 很基本的STL容器操作了,应该可以1A的,但是忘记返回值的时候,clang的报错感觉并不友好啊.. cl ...
- 剑指Offer9——使用双栈模拟队列
剑指Offer9--使用双栈模拟队列 队列Queue是具有FIFO(First in First out)特性的数据结构,栈Stack是具有LIFO(后进先出)特性的数据结构.下面提供一种思路使用双栈 ...
- 《剑指offer》(第二版)Java实现
Github链接: <剑指offer>(第二版)Java实现 欢迎star!
- 剑指offer计划27(栈与队列困难)---java
1.1.题目1 剑指 Offer 59 - I. 滑动窗口的最大值 1.2.解法 解题思路:(来自作者bigbeats) 相当于维护一个最大队列(队头元素最大,向队尾非严格递减) 在未形成窗口前,先构 ...
- 剑指offer计划25(模拟中等)---java
1.1.题目1 剑指 Offer 29. 顺时针打印矩阵 1.2.解法 常规开头,先判断特殊情况,然后创建四个变量存放矩阵四边的长度限制. 创建res数组存放结果. 循坏开始,遍历完一行或者一列,就将 ...
- 剑指offer计划5(查找算法中等版)---java
1.1.题目1 剑指 Offer 04. 二维数组中的查找 1.2.解法 其实就是暴力解法的升级版,从最后一行开始判断,通过num当前的大小, 如果还是大于目标值则行数-1,若是小于则列数+1 1.3 ...
- 剑指offer计划9(动态规划中等版)---java
1.1.题目1 剑指 Offer 42. 连续子数组的最大和 1.2.解法 得到转移方程后,单次遍历. 当前面的连续子数组的和比较是否大于0,是则加起来, 若小于零,则当前的值就可当子数组的开头. 判 ...
- 剑指offer计划16( 排序简单)---java
1.1.题目1 剑指 Offer 45. 把数组排成最小的数 1.2.解法 这题看的题解,发现自己思路错了. 这里直接拿大佬的题解来讲吧. 一开始这里就把创一个string的数组来存int数组 Str ...
- 剑指offer计划19( 搜索与回溯算法中等)---java
1.1.题目1 剑指 Offer 64. 求1+2+-+n 1.2.解法 这题看评论区真的绝了,都是人才,各个说话都好听,我看到个还有用异常来结束的就离谱. 这题用了&&当左边为fal ...
随机推荐
- POJ2482 Stars in Your Window 题解
Fleeting time does not blur my memory of you. Can it really be 4 years since I first saw you? I stil ...
- java跨平台性说明
一.举例说明 我们知道,只要是用标准C开发的程序,使用不同的编译器编译后的可执行文件是可以在对应平台运行的,比如windows可以使用VC编译,那编译后的exe文件就可以在windows下运行:liu ...
- Linux chgrp命令的使用
Linux chgrp(change group)命令用于变更文件或目录的所属群组. 语法 chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 ch ...
- spring.jpa.open-view问题
由ReentrantLock和JPA(spring.jpa.open-in-view)导致的死锁问题原因分析. 问题 在压测过程中,发现服务经过一段时间压测之后出现无响应,且无法自动恢复. 分析 从上 ...
- vue+element实现分页--之--前端分页
效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...
- java时间工具类型,格式化时间,最近7天 月初 月末 季度 月度 时间格式化 等等
package com.tz.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util. ...
- noip模拟测试22
考试总结:这次考试题,有好多部分分,导致了我在考试过程中一心想拿到这些部分分,对于正解没有留出时间进行思考,这是一个教训,在以后的考试中我一定要留出足够的思考时间,不要被部分分限制.还有,我的部分分也 ...
- 背单词(AC自动机+线段树+dp+dfs序)
G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...
- Javas数组03——数组的使用
Javas数组--数组的使用 1.普通的for循环 2.for-each循环 3.数组做方法入参 4.数组做返回值 例子1--普通for循环 package array; public clas ...
- WPS函数
vlookup函数:=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 官方解释:其逻辑为在某一区间内搜索区间外某一单元格的值, ...