剑指offer系列18---顺时针打印矩阵
【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。push pop min
【思路】设计一个辅助栈,当新加入的原数据栈中的数小于辅助栈顶的数时就加入该数,大于就继续加入辅助栈顶的数。这样想取出最小数就直接取出辅助栈栈顶的数就可以。
package com.exe4.offer; import java.util.Stack; /**
* 18【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。
* @author WGS
*
*/
public class MinInStack { Stack<Integer> dataStack=new Stack<Integer>();//数据栈
Stack<Integer> assisstStack=new Stack<Integer>();//辅助栈 //压入操作 保证最小的数放在栈顶,所以原数据栈压入一个数时,辅助栈要比较该数与上个数的大小,》则仍压入上个数
//小,则压入该数
public void push(int node){
dataStack.push(node);
if(assisstStack.size()==0 || node<assisstStack.peek()){//新压入的数node小,就压入node
assisstStack.push(node);
}else{
assisstStack.push(assisstStack.peek());//否则压入assisstStack中最小的数
}
} public void pop(){
if(dataStack.size()>0 && assisstStack.size()>0){
dataStack.pop();
assisstStack.pop();
}
}
//元数据栈顶值
public int top(){
if(dataStack.size()>0){
return dataStack.peek();
}
return -1;
}
//辅助栈中最小值
public int min(){
if(dataStack.size()>0 && assisstStack.size()>0){
return assisstStack.peek();
}
return -1; }
public static void main(String[] args) {
MinInStack minStack=new MinInStack();
minStack.push(1);
//minStack.pop();
minStack.push(4);
minStack.push(2);
minStack.push(11); System.out.println(minStack.min());//1 辅助栈中最小值
System.out.println(minStack.top());//11 元数据栈中栈顶值 } }
剑指offer系列18---顺时针打印矩阵的更多相关文章
- 剑指offer系列17---顺时针打印矩阵(不是很懂)
package com.exe4.offer; import java.util.ArrayList; /** * 17[题目]输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果 ...
- 剑指offer 20:顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 剑指offer系列33-----把二叉树打印成多行
[题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...
- 剑指offer-面试题20.顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如: 输入一个矩阵如下: 则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 这道题的 ...
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- 剑指Offer - 九度1515 - 打印1到最大的N位数
剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案 ...
- 【剑指Offer】把二叉树打印成多行 解题报告(Python)
[剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- Go语言实现:【剑指offer】把二叉树打印成多行
该题目来源于牛客网<剑指offer>专题. 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 需要分层,二维数组. Go语言实现: /** * Definition for ...
- 剑指Offer系列之题16~题20
目录 16.反转链表 17.合并两个排序的链表 18.树的子结构
随机推荐
- js对数组的操作函数
js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...
- AC自动机 专题
// 求目标串中出现了几个模式串 //==================== #include <stdio.h> #include <algorithm> #include ...
- 希尔排序(C++版)
#include <iostream> using namespace std; /** Shell Sort * * Key: * * increment * * insertSort( ...
- ZOJ 1201 Inversion
原题链接 题目大意:给一个数组{ A1,A2,…,An } ,要求生成另一个数组B1,B2,…,Bn,使得Bi表示的是在数组A中排在i前面大于i的数字的个数.题目的输入是数组A(字母P表示)或者数组B ...
- c 深度剖析 4
1 预处理 1#define 1.不能用 #define 定义注释,因为注释先于预处理被处理. 2 .宏定义表达式 1,注意展开后结合顺序,尽量多加括号 2,常量定义时注意是否溢出 1 #define ...
- MATLAB格式化输出控制
format 默认格式 format short 5字长定点数 format long 15字长定点数 format short e 5字长浮点数 format long e 15字长浮点数 form ...
- Codeforces Round #137 (Div. 2)
A. Shooshuns and Sequence 显然\([k,n]\)之间所有数均要相同,为了求最少步数,即最多模拟\(n\)次操作即可. B. Cosmic Tables 映射\(x_i,y_i ...
- MySQL性能参数详解 - max_connect_errors
max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况.max_connect_errors的值与性能并无太大关系. 默认情 ...
- Integer相加产生的类型转换问题
做项目时犯二没有搞清楚优先级的问题从而暴露出一个Integer相加而产生的类型转换的问题 Integer a; Integer b; Integer c; c= a+b==null?a:b; jav ...
- 【P1326】超级教主
DP优化 原题: LHX教主很能跳,因为Orz他的人太多了.教主跳需要消耗能量,每跳1米就会消耗1点能量,如果教主有很多能量就能跳很高.教主为了收集能量,来到了一个神秘的地方,这个地方凡人是进不来的. ...