【剑指offer】-包括main函数的栈-21/67

简介: 【剑指offer】-包括main函数的栈-21/67

1. 题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。

2. 题目分析

该题有二种解决方法

2.1 常规解决思路:

在写min()方法的时候,建立一个辅助栈,将stack中的元素导入至辅助栈中,并且比较出来最小值,在从辅助栈导入至stack中。

2.2 剑指offer思路:

创建两个栈,分别为数据栈(stcak1)和辅助栈(stack2),每一次数据(node)储存至数据栈时,判断当前的辅助栈是否为空和node是否小于辅助栈中最小的数值(也就是栈顶的数值)。若小于,则将node压入辅助栈(作为最小值)。若大于,则将辅助栈顶的数字再一次压入。

3. 题目代码

常规思路代码

import java.util.Stack;
public class Solution {
   Stack<Integer> stack = new Stack<Integer>();
    Stack<Integer> stack1 = new Stack<Integer>();
    public void push(int node) {
        stack.push(node);
    }
    public void pop() {
        stack.pop();
    }
    public int top() {
        return stack.peek();
    }
    public int min() {
        int min = stack.peek();
        while (stack.isEmpty() != true) {
            int node = stack.pop();
            if (node < min) {
                min = node;
            }
            stack1.push(node);
        }
        while (stack1.isEmpty() != true) {
            stack.push(stack1.pop());
        }
        return min;
    }
}

剑指offer思路

Stack<Integer> stack1 = new Stack<Integer>();
  Stack<Integer> stack2 = new Stack<Integer>();
  public void push(int node) {
    stack1.push(node);//将数据保存至数据栈
    //当辅助栈为空或者当前数据小于辅助栈中最小的值时 添加至辅助栈
    if(stack2.isEmpty() || node < stack2.peek()) {
      stack2.push(node);
    }else {
      stack2.push(stack2.peek());
    }
  }
  public void pop() {
    stack1.pop();
    stack2.pop();
  }
  public int top() {
    return stack1.peek();
  }
  public int min() {
    return stack2.peek();
  }


相关文章
|
1天前
|
存储 NoSQL C语言
数据结构——顺序栈与链式栈的实现-2
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-2
|
1天前
|
存储 C语言
数据结构——顺序栈与链式栈的实现-1
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-1
|
1天前
栈的基本应用
栈的基本应用
12 3
|
1天前
栈与队列理解
栈与队列理解
12 1
|
1天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
12 0
数据结构与算法 栈与队列
|
1天前
|
机器学习/深度学习 算法 测试技术
【单调栈】3113. 边界元素是最大值的子数组数目
【单调栈】3113. 边界元素是最大值的子数组数目
|
1天前
|
C++
数据结构(共享栈
数据结构(共享栈
8 0
|
1天前
|
C++
数据结构(顺序栈
数据结构(顺序栈
13 2
|
1天前
|
容器
【栈与队列】栈与队列的相互转换OJ题
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
10 0
|
1天前
|
存储
【栈】基于顺序表的栈功能实现
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
13 0