栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包含min函数的栈

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包含min函数的栈

题目链接

思路

       要求min,push及pop的时间复杂度都是O(1),就必须要借助于辅助栈;我们可以定义个dataStack和一个assistStack
       push时,将数据push到dataStack,assistStack只存入最小的元素到头部,方便min函数直接取出;首次push时直接将元素分别push到两个栈内,如果不是首次push就把assistStack头部的元素与当前元素对比,把最小的放入到头部
       pop时,为了保证两个栈内元素个数相等,两个栈同时pop
       top时,取出栈顶元素,并不删除,直接从dataStack里面取即可
       min时,直接取assistStack中的头部元素

java
public class MinStack {

    Stack dataStack;
    Stack assistStack;

    public MinStack() {
        dataStack = new Stack<>();
        assistStack = new Stack<>();
    }

    public void push(int x) {
        dataStack.push(x);
        if (assistStack.isEmpty()) {
            assistStack.push(x);
            return;
        }
        assistStack.push(Math.min(assistStack.peek(), x));
    }

    public void pop() {
        dataStack.pop();
        assistStack.pop();
    }

    public int top() {
        return dataStack.peek();
    }

    public int min() {
        return assistStack.peek();
    }
}

go
type MinStack struct {
	dataStack, assistStack *list.List
}

func Constructor() MinStack {
	return MinStack{
		dataStack:   list.New(),
		assistStack: list.New(),
	}
}

func (this *MinStack) Push(x int) {
	this.dataStack.PushBack(x)
	if this.assistStack.Len() == 0 || this.assistStack.Back().Value.(int) >= x {
		// 数据栈等于0获取栈头大于等于当前元素才会添加
		this.assistStack.PushBack(x)
	}
}

func (this *MinStack) Pop() {
	assist := this.assistStack.Back()
	data := this.dataStack.Back()
	if assist.Value.(int) == data.Value.(int) {
		// 只有辅助栈元素与数据栈相同才会删除
		this.assistStack.Remove(assist)
	}
	this.dataStack.Remove(data)

}

func (this *MinStack) Top() int {
	return this.dataStack.Back().Value.(int)
}

func (this *MinStack) Min() int {
	return this.assistStack.Back().Value.(int)
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号