leetcode155_Min Stack

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

 

Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.

乍看没有想清楚可以用什么来实现,本来想用一维数组,但一维数组的增添移位问题很麻烦。所以这种问题都应该使用有向链表。

总结关于list的一些关系结构与常用方法:

首先我们可以看到在最上面是Collettion然后是List、Queue、set、在List下面又有ArrayList、Linkedlist,Queue下面有Linkedlist,Set下面又有HashSet。

1.add()方法用来向创建的arraylist中添加元素,添加元素会自动添加到列表的末尾。add()方法有两个重载,步骤3是add()的第一个方法,传入一个参数,接下来我们使用add()的另外一个方法,传入两个参数,第一个传入参数为想要添加到列表的位置,注意这里位置是从0开始而不是从1,第二个传入参数为添加的元素。

  addAll( )将一个集合插入到指定集合的指定位置。

2.使用remove()方法删除元素,如果传入的参数为元素本身,则通过元素本身的引用来删除元素;如果传入的参数为列表的索引,则通过列表的索引值来删除元素。

3.set()方法设置列表中索引对应的元素,传入两个参数,第一个参数为列表的索引值,第二个参数为要设置的元素值,如下图:

如何使用java中的ArrayList常用方法

4.contains()方法判断列表中是否包含指定元素,传入参数为需要判断的元素

5.size()方法用于获取arraylist列表的大小

6.isEmpty()判断集合是否为空

7.indexOf()返回集合中第一次出现这个元素的位置如果不存在则返回-1

8.get()返回集合中指定位置的元素

9.containsAll()判断集合中是否包含另一个集合的全部

10.clear()清除所有元素

java版本代码如下:

//用有序链表来实现
public class MinStack {
    /** initialize your data structure here. */
    LinkedList<Integer> linkedList=new LinkedList<>();
    int min=Integer.MAX_VALUE;//注意写法MAX_VALUE纯大写,直接赋值首个值在push中用起来比较复杂,不如用Integer.MAX_VALUE直接初始化方便些
    
    public MinStack() {
    } //MinStack minStack = new MinStack();//主函数没有内容??
    
    public void push(int x) {
        linkedList.add(x);//以add()方法push元素
        if(x<min)//增加元素的时候,挨个比较就可以保持min了
            min=x;
    }
     
    public void pop() {//弹出元素的时候,min有可能不变有可能改变,下面分为两种情况处理
        if(min<linkedList.getLast()) //getLast()用于获取最后一个链表元素的值
            linkedList.removeLast();//removeLast()用于删除最后一个值
        else{
            linkedList.removeLast();
            min=Integer.MAX_VALUE;//如果最后一个值就是最小值,那么需要重新遍历一遍得到新的min
            for(int i=0;i<linkedList.size();i++){
                if(linkedList.get(i)<min)
                    min=linkedList.get(i);
            }
        }
         
    }
     
    public int top() {
        return linkedList.getLast();//队列Queue先进先出,栈Stack先进后出;所以用getLast()获取TOP值
    }
     
    public int getMin() {
        return min;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值