题解 | #包含min函数的栈#

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

class Solution
{
public:
    //压栈
    void push(int value)
    {
        m_currentStack.push(value);

        if (m_minValueStack.empty())
        {
            m_minValueStack.push(value);
        }
        else
        {
            //有更小的,那么压栈进去,记录当前的最小值
            if (value <= m_minValueStack.top())
            {
                m_minValueStack.push(value);
            }
        }

    }

    //注意考虑栈空情况
    void pop() 
    {
        if (m_currentStack.top() == m_minValueStack.top())
        {
            m_currentStack.pop();
            m_minValueStack.pop();
        }
        else
        {
            m_currentStack.pop();
        }
    }

    //获取栈顶元素
    int top() 
    {
        return m_currentStack.top();
    }

    //获取最小值
    int min()
    {
        return m_minValueStack.top();
    }

    stack<int> m_currentStack;//当前的栈
    stack<int> m_minValueStack;//存储当前最小值
	
};

采用双栈法进行求解!

package main

import "fmt"

// 定义两个stack
var currentStack, minValueStack []int

// 压栈操作
func Push(node int) {
	currentStack = append(currentStack, node)
	//当前可以直接追加
	if len(minValueStack) == 0 {
		minValueStack = append(minValueStack, node)
	} else {
		if node <= Min() {
			minValueStack = append(minValueStack, node)
		}
	}

}

// 出栈操作
func Pop() {
	if Top() == Min() {
		currentStack = currentStack[:len(currentStack)-1]
		minValueStack = minValueStack[:len(minValueStack)-1]
	} else {
		currentStack = currentStack[:len(currentStack)-1]
	}
}

// 返回栈顶
func Top() int {
	return currentStack[len(currentStack)-1]
}

// 返回最小值
func Min() int {
	return minValueStack[len(minValueStack)-1]
}

func main() {
	Push(9)
	Push(1)
	Push(6)
	fmt.Println(Min())
	Pop()
	fmt.Println(Top())
	fmt.Println(Min())
	Pop()
	//fmt.Println(Top())
	fmt.Println(Min())
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务