Next Greater Element using Stack

Next Greater Element using Stack

Find next greater element for each element in given array. Check problem statement at https://www.geeksforgeeks.org/problems/next-larger-element-1587115620/1

Solved on my on machine pyCharm. Below the solution.

class Stack:
    def __init__(self):
        self.a = [None] * 1000000
        self.top = -1

    def pop(self):
        if not self.empty:
            p = self.a[self.top]
            self.top = self.top - 1
            return p
        else:
            return -1

    def push(self, x):
        if not self.full:
            self.top = self.top + 1
            self.a[self.top] = x

    def top_element(self):
        if not self.empty:
            return self.a[self.top]
        else:
            raise RuntimeError("Stack is empty")

    @property
    def empty(self):
        return self.top == -1

    @property
    def full(self):
        return self.top == 1000000

    def print(self):
        print("stack:", self.a[:self.top + 1], "top:", self.top, )


stack = Stack()

arr = [1, 3, 2, 4]
# arr = [6, 8, 0, 1, 3]
# arr =[10, 20, 30, 50]
# arr =[50, 40, 30, 10]

n = len(arr)
ans = [None] * n
stack.push(0)

for i in range(1, n):
    # print("i: ", i, "arr[i]: ", arr[i], "arr[top_ele: ",arr[stack.top_element()], "ans: ", ans)
    # stack.print()
    while not stack.empty and arr[i] > arr[stack.top_element()]:
        ans[stack.pop()] = arr[i]
        # stack.print()
    stack.push(i)
    # stack.print()

while not stack.empty:
    ans[stack.pop()] = -1

# stack.print()
print(ans)        

要查看或添加评论,请登录

Pradip Dharam的更多文章

社区洞察

其他会员也浏览了