LeetCode in Kotlin

1381. Design a Stack With Increment Operation

Medium

Design a stack which supports the following operations.

Implement the CustomStack class:

Example 1:

Input

[“CustomStack”,”push”,”push”,”pop”,”push”,”push”,”push”,”increment”,”increment”,”pop”,”pop”,”pop”,”pop”]

[[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]

Output: [null,null,null,2,null,null,null,null,null,103,202,201,-1]

Explanation:

CustomStack customStack = new CustomStack(3); // Stack is Empty []
customStack.push(1); // stack becomes [1]
customStack.push(2); // stack becomes [1, 2]
customStack.pop(); // return 2 --> Return top of the stack 2, stack becomes [1]
customStack.push(2); // stack becomes [1, 2]
customStack.push(3); // stack becomes [1, 2, 3]
customStack.push(4); // stack still [1, 2, 3], Don't add another elements as size is 4
customStack.increment(5, 100); // stack becomes [101, 102, 103]
customStack.increment(2, 100); // stack becomes [201, 202, 103]
customStack.pop(); // return 103 --> Return top of the stack 103, stack becomes [201, 202]
customStack.pop(); // return 202 --> Return top of the stack 102, stack becomes [201]
customStack.pop(); // return 201 --> Return top of the stack 101, stack becomes []
customStack.pop(); // return -1 --> Stack is empty return -1. 

Constraints:

Solution

class CustomStack(private val maxSize: Int) {
    private var top = 0
    private val stack: IntArray

    init {
        stack = IntArray(maxSize)
    }

    fun push(x: Int) {
        if (top == maxSize) {
            return
        }
        stack[top] = x
        top++
    }

    fun pop(): Int {
        if (top == 0) {
            return -1
        }
        val popValue = stack[top - 1]
        stack[top - 1] = 0
        top--
        return popValue
    }

    fun increment(k: Int, `val`: Int) {
        if (top == 0 || k == 0) {
            return
        }
        for (i in 0 until k) {
            if (i == top) {
                break
            }
            stack[i] += `val`
        }
    }
}
/*
 * Your CustomStack object will be instantiated and called as such:
 * var obj = CustomStack(maxSize)
 * obj.push(x)
 * var param_2 = obj.pop()
 * obj.increment(k,`val`)
 */