Kuangcp/JavaBase

View on GitHub
algorithms/src/main/java/com/github/kuangcp/strcuture/stackapp/GetMin.java

Summary

Maintainability
A
0 mins
Test Coverage
package com.github.kuangcp.strcuture.stackapp;

import java.util.Objects;
import java.util.Stack;
import lombok.Data;

/**
 * @author https://github.com/kuangcp on 2019-12-29 16:45
 */
@Data
public class GetMin {

  private Stack<Integer> data = new Stack<>();
  private Stack<Integer> min = new Stack<>();

  void pushA(int value) {
    data.push(value);
    if (min.isEmpty()) {
      min.push(value);
    } else if (min.peek() >= value) {
      min.push(value);
    }
  }

  int popA() {
    if (data.isEmpty()) {
      return -1;
    }

    Integer value = data.pop();
    if (!min.isEmpty() && Objects.equals(value, min.peek())) {
      min.pop();
    }
    return value;
  }

  int getMin() {
    return min.peek();
  }

  void pushB(int value) {
    data.push(value);
    if (min.isEmpty()) {
      min.push(value);
    } else if (min.peek() >= value) {
      min.push(value);
    } else {
      min.push(min.peek());
    }
  }

  int popB() {
    if (!min.isEmpty()) {
      min.pop();
    }

    if (!data.isEmpty()) {
      return data.pop();
    }

    return -1;
  }
}