6ms Java Solution using Linked List. Clean, self-explanatory and efficient.
class MinStack {\n        class Node{\n            int value;\n            int min;\n            Node next;\n            \n            Node(int x, int min){\n  
    class MinStack {\n        class Node{\n            int value;\n            int min;\n            Node next;\n            \n            Node(int x, int min){\n                this.value=x;\n                this.min=min;\n                next = null;\n            }\n        }\n        Node head;\n        public void push(int x) {\n            if(null==head){\n                head = new Node(x,x);\n            }else{\n                Node n = new Node(x, Math.min(x,head.min));\n                n.next=head;\n                head=n;\n            }\n        }\n    \n        public void pop() {\n            if(head!=null)\n                head =head.next;\n        }\n    \n        public int top() {\n            if(head!=null)\n                return head.value;\n            return -1;\n        }\n    \n        public int getMin() {\n            if(null!=head)\n                return head.min;\n            return -1;\n        }\n    }
[]