剑指Offer的学习笔记(C#篇)-- 包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
一 . 题目该怎么想
1 . 定义栈的数据结构;实现Push、Pop、Top、Min方法;时间复杂度为O(1) 。
思路:定义两个栈。一个存储栈,一个辅助栈。
Push方法:1. 存储栈 -- 正常进栈即可。
2. 辅助栈 -- 先定义一个数(随意,目的是让第一个进栈的数进辅助栈),然后将这个数与之后进栈的数进行比较,当在这之后进栈的数小于这个数的时候,就把他存在辅助栈,若大于等于,则忽略,直接不执行。
Pop方法:1 . 存储栈 -- 正常出栈即可。
2 . 辅助栈 -- 如果存储栈出栈的这个数等于辅助栈将要出栈的数,那么辅助栈出栈,负责不搭理他,也不要出。
Top方法:只需 return stack1.Peek(); 其中stack1表示的是存储栈,这里普及一下(Stack.peek()和Stack.pop()的相同点是 获取栈顶的值,不同点 则是 Stack.peek()只是获取栈顶的值,而Stack.pop()是获取栈顶的值然后删除。)
Min方法:在第二部Pop的时候来一手这个 Min = minstack2.Peek(); ,很稳,其中 minstack2表示的是辅助栈。
来,为了更好的理解,看图咯!!

二 . 代码实现
using System.Collections.Generic;
//using泛型集合类List、DIctionary、Queue、Stack、SortedList,若不引用不可运行
class Solution
{
//定义两个栈,一个存储栈,一个辅助栈
Stack<int> stack1 = new Stack<int>();
Stack<int> minstack2 = new Stack<int>();
//先定义一个最小值Min,其中他的初始状态是int类型中的最大值(单纯的凑数而已,无关紧要)
int Min=int.MaxValue;
//push方法,首先是存储栈进栈,然后一个if函数,若进栈的这个数比辅助栈里面最小的数还小,则辅助栈也执行进栈
public void push(int node)
{
stack1.Push(node);
if(node<Min)
{
Min=node;
minstack2.Push(node);
}
}
//pop方法,若存储栈pop出的数等于最小值,辅助栈执行POP方法
public void pop()
{
if(stack1.Pop()== Min)
{
minstack2.Pop();
Min = minstack2.Peek();
}
}
//Stack.peek()和Stack.pop()的相同点是 获取栈顶的值,
//不同点 则是 Stack.peek()只是获取栈顶的值,而Stack.pop()是获取栈顶的值然后删除。
public int top()
{
return stack1.Peek();
}
//不解释
public int min()
{
return Min;
}
}
剑指Offer的学习笔记(C#篇)-- 包含min函数的栈的更多相关文章
- 剑指Offer(二十):包含min函数的栈
剑指Offer(二十):包含min函数的栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ba ...
- (剑指Offer)面试题21:包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 1.除了原来的栈s,增加一个辅助栈s_min,用 ...
- 《剑指offer》— JavaScript(20)包含min函数的栈
包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 实现代码 var stack = []; function push(node) { stack. ...
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...
- 剑指Offer的学习笔记(C#篇)-- 反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...
- 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ...
- 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将 num1[0], num2[0 ...
- 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...
随机推荐
- ZOJ - 3861 Valid Pattern Lock 【全排列】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861 思路 先生成全排列,然后判断哪些情况不符合的,剔除就好了 ...
- HTML5颜色渐变3D文字特效
在线演示 本地下载
- Linux-3.14.12内存管理笔记【内存泄漏检测kmemleak示例】【转】
本文转载自:http://blog.chinaunix.net/uid-26859697-id-5758037.html 分析完kmemleak实现后,照常实验一下,以确定功能正常. 如kmemche ...
- Kbuntu16.04添加工作空间
工作空间是一个非常方便的功能,可以让开发者每次只聚焦一个屏幕,又能在各个空间中来回切换.有一种屏幕被扩展的感觉. Kbuntu默认只有一个工作空间,需要按如下方式添加: System settings ...
- PHP的引用详解【转】
摘自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/10/2173092.html 官方文档: 1.引用是什么:http://ww ...
- legend2---开发日志14(游戏对用户友好的设计思路)
legend2---开发日志14(游戏对用户友好的设计思路) 一.总结 一句话总结: 不强制,但是激励:比如宗门灵力等级从强制提升到提升宗门和用户的修炼速度 1.丹药有必要做成随机数值么? 没有 1. ...
- densenet tensorflow 中文汉字手写识别
densenet 中文汉字手写识别,代码如下: import tensorflow as tf import os import random import math import tensorflo ...
- swoole+nginx反向代理
nginx配置: server { listen 80; server_name www.swoole.com; root /data/wwwroot/www.swoole.com; location ...
- base64编码方式
一.编码的两大方式: 在python3.x中,字符串编码分为unicode和bytes两大类编码方式. 直接书写s='中国人',这种方式定义的编码方式为unicode,是通用的方式. 另一种是byte ...
- 关于ng-class中添加多个样式类的解决方案
想要达到ng-class的效果,有两种写法 1.class=“{{class}} class1 class2” 2.ng-class="{true: 'active', false: 'in ...