Leetcode - Maximum Length of Repeated Subarray
Leetcode - Perform String Shifts

Leetcode - Min Stack

violet posted @ Apr 11, 2020 04:44:18 AM in 算法 with tags Algorithm Golang array , 224 阅读

https://leetcode.com/problems/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.

 

type MinStack struct {
    minElement int
    arr []int
}


/** initialize your data structure here. */
func Constructor() MinStack {
    return MinStack{
        arr: []int{},
    }
}


func (this *MinStack) Push(x int)  {
    if len(this.arr) == 0 {
        this.arr = append(this.arr, x)
        this.minElement = x
        return
    }
    if x >= this.minElement {
        this.arr = append(this.arr, x)
        return
    }
    this.arr = append(this.arr, 2*x - this.minElement)
    this.minElement = x
}


func (this *MinStack) Pop()  {
    if this.arr[len(this.arr)-1] > this.minElement {
        this.arr = this.arr[:len(this.arr)-1]
        return
    }
    y := this.arr[len(this.arr)-1]
    this.minElement = 2*this.minElement - y
    this.arr = this.arr[:len(this.arr)-1]
}


func (this *MinStack) Top() int {
    y := this.arr[len(this.arr)-1]
    if y > this.minElement {
        return y
    }
    minElement := 2*this.minElement - y
    
    return (y+minElement)/2
}


func (this *MinStack) GetMin() int {
    return this.minElement
}


/**
 * Your MinStack object will be instantiated and called as such:
 * obj := Constructor();
 * obj.Push(x);
 * obj.Pop();
 * param_3 := obj.Top();
 * param_4 := obj.GetMin();
 */

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter