`

空间换时间----设计包含min函数的栈

 
阅读更多
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。

凡事都按照题目来:这里的要求只有一个,就是时间复杂度是1,既然这样,那么我们可以把空间复杂度变成n来换取时间。。。霍霍

难点:在出栈的时候也要知道最小的元素是什么,所以必须记录每个阶段的最小元素的位置

思路:需要一个辅助栈。每次push一个新元素的时候,同时将最小元素的位置。push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。

Class Stack{
  List<Integer> list = new ArrayList<Integer>();
  List<Integer> minList = new ArrayList<Integer>();
 
   public Integer pop(){
         minList.remove(minList.length);
         return list.remove(list.length);
   }

  public Integer getMin(){
       return list.get(minList.get(minList.length));
  }

  public Integer push(Integer i ){
       if(minList.length==0){
            minList.add(0);
            list.add(i);
       }else{
            Integer lastMinIndex = minList.get(minList.length);
            Integer lastMin = list.get(lastMinIndex);
            Integer minIndex = lastMin<i ? lastMinIndex : list.length+1;
            list.add(i);
            minList.add(minIndex);
      }
      
  }


}


分享到:
评论

相关推荐

    包含min函数的栈1

    标题中的“包含min函数的栈1”指的是一个特殊的栈数据结构,它除了具有常规栈的基本功能(push、pop和top)之外,还提供了一个额外的min函数,可以在常数时间内返回栈内当前最小元素。这样的设计是为了解决在处理一...

    Python《剑指offer》算法实现-包含min函数的栈

    # Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 ...6. 所需的素质:扎实的基础知识、能写高质量的代码、分析问题是思路清晰、能优化时间和空间效率、学习沟通能力

    数据结构--栈 的C语言实现.zip

    栈是一种线性数据结构,它的主要操作包括压栈(push)和弹栈(pop)。压栈是在栈顶添加元素,而弹栈则是移除栈顶元素。除此之外,还有查看栈顶元素但不移除的操作,称为顶阅(peek或top)。栈常用于解决递归问题、...

    栈的基本操作算法实现(C语言)

    在计算机科学中,栈被广泛应用于各种算法和程序设计中,如函数调用、表达式求值、深度优先搜索等。本篇将详细介绍如何使用C语言实现栈的基本操作。 首先,我们需要定义一个栈的数据结构。在C语言中,这通常通过...

    栈的插入和删除-很简单

    栈在计算机科学中的应用非常广泛,例如在表达式求值、递归、内存管理、函数调用等场景都有所涉及。 在编程实现栈时,我们通常有两种方式:数组和链表。数组实现的栈,由于其固定大小,适合存储元素数量确定的情况;...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **Java内存区域**:包括堆、栈、程序计数器、本地方法栈和方法区。 - **内存模型**:规定了变量的存储位置以及线程对变量的操作规则。 #### 垃圾回收机制 - **GC算法**:包括标记-清除、复制、标记-整理等算法。...

    中国科学院大学22-23秋季学期 《程序设计基础与实验(C语言)》课程大作业——基于Min-Max搜索策略的五子棋对战程序

    C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. ...

    C语言实现的栈操作(基于数据结构(C语言版))

    在C语言中,我们可以使用动态内存分配函数`malloc()`或`calloc()`来为栈分配空间。例如,如果栈是用来存储整数,我们可以定义一个结构体,包含一个整数数组和一个表示栈顶位置的变量: ```c typedef struct Stack {...

    1_c语言实现栈操作_

    在C语言中,可以使用`malloc`或`calloc`函数动态分配数组空间。例如: ```c Stack* createStack(int size) { Stack* stack = (Stack*)malloc(sizeof(Stack)); stack-&gt;data = (int*)malloc(size * sizeof(int)); ...

    MATLAB函数参考.docx

    MATLAB 是一种强大的数学计算和数据分析软件,它提供了...以上只是MATLAB函数和概念的冰山一角,MATLAB还包含更复杂的图形绘制、数据可视化、信号处理、优化算法、统计分析等功能,是科学研究和工程计算的强大工具。

    百度 微软 面试题大全

    设计一个数据结构,使其既有栈的基本操作(push、pop),又有在常数时间内返回栈内最小元素的 min 函数,是一个典型的数据结构设计问题。为了达到 O(1) 的时间复杂度,我们需要在每次 push 和 pop 操作时更新最小值...

    min_comp.rar_Always

    而`min_comp.pass.c`可能包含一个或多个最小化的编译测试用例,这些用例在特定的编译选项下通过了编译器的检查,表明栈保护功能在这些情况下是生效的。 为了确保编译器始终启用`__stack_chk_fail`,开发者可能需要...

    (1912制作)C语言笔试题集之3(103页)

    - **题目描述**:改进标准栈数据结构,增加一个`min()`函数,以便在常数时间内获取栈中的最小值。 - **解决思路**: - 使用两个栈,一个用来存储数据,另一个用来存储最小值。 - 在每次压栈时更新最小值栈的顶部。...

    微软面试题目--精选

    设计包含min函数的栈 #### 题目描述: 设计一个栈的数据结构,要求除了常规的`push`和`pop`操作外,还应提供一个`min`函数,用于获取栈中最小元素。这三个操作的时间复杂度都应为O(1)。 #### 解析: 通常情况下,...

    百度质量部面试试题

    定义栈的数据结构,并实现 `min` 函数 **题目解析:** 为了实现一个能够快速获取最小元素的栈,我们需要额外维护一个辅助栈来记录最小值。对于每次的 `push` 和 `pop` 操作,都需要确保辅助栈的栈顶始终是最小值。...

    嵌入式软件工程师笔试题(后期持续更新)

    根据程序的需求预估最大深度的函数调用栈大小,以及每个函数调用可能占用的最大局部变量和寄存器大小。 - 可以通过调试工具监控栈的使用情况,确保没有栈溢出的风险。 2. **堆的分配**: - 堆的大小同样在链接...

    数据结构停车场管理系统设计方案.doc

    - **时间节点类型(Time)**:定义了一个结构体,包含小时(hour)和分钟(min)两个整型变量,用于表示时间。 - **车辆信息节点类型(CarNode)**:包含车牌号(num)、到达时间(reach)和离开时间(leave),...

    程序员面试题精选100题.doc

    设计包含min函数的栈(栈) **知识点概述**: 本题要求设计一个特殊的栈,该栈除了支持常规的push和pop操作外,还需要提供一个min函数,用于获取栈中当前的最小元素。要求所有操作的时间复杂度均为O(1)。 **解决...

    栈求表达式的值(C语言实现)

    在计算机科学中,栈是一种非常重要的数据结构,它遵循“后进先出”(LIFO,Last In First Out...这个程序可以处理简单的算术表达式,但对于更复杂的表达式,如包含变量、函数等,可能需要扩展算法以支持更丰富的语法。

Global site tag (gtag.js) - Google Analytics