From 711d78b15cc2edf428d9717f0a0723fe2f0be6d1 Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Thu, 4 Nov 2021 03:20:05 -0300 Subject: [PATCH 1/2] Fix type annotations in next_greater_element.py --- data_structures/stacks/next_greater_element.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/data_structures/stacks/next_greater_element.py b/data_structures/stacks/next_greater_element.py index d8c7ed17317b..1429f72e910e 100644 --- a/data_structures/stacks/next_greater_element.py +++ b/data_structures/stacks/next_greater_element.py @@ -1,8 +1,10 @@ +from __future__ import annotations + arr = [-10, -5, 0, 5, 5.1, 11, 13, 21, 3, 4, -21, -10, -5, -1, 0] expect = [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1] -def next_greatest_element_slow(arr: list) -> list: +def next_greatest_element_slow(arr: list[float]) -> list[float]: """ Get the Next Greatest Element (NGE) for all elements in a list. Maximum element present after the current one which is also greater than the @@ -10,9 +12,11 @@ def next_greatest_element_slow(arr: list) -> list: >>> next_greatest_element_slow(arr) == expect True """ + result = [] + for i in range(0, len(arr), 1): - next = -1 + next: float = -1 for j in range(i + 1, len(arr), 1): if arr[i] < arr[j]: next = arr[j] @@ -21,7 +25,7 @@ def next_greatest_element_slow(arr: list) -> list: return result -def next_greatest_element_fast(arr: list) -> list: +def next_greatest_element_fast(arr: list[float]) -> list[float]: """ Like next_greatest_element_slow() but changes the loops to use enumerate() instead of range(len()) for the outer loop and @@ -31,7 +35,7 @@ def next_greatest_element_fast(arr: list) -> list: """ result = [] for i, outer in enumerate(arr): - next = -1 + next: float = -1 for inner in arr[i + 1 :]: if outer < inner: next = inner @@ -40,7 +44,7 @@ def next_greatest_element_fast(arr: list) -> list: return result -def next_greatest_element(arr: list) -> list: +def next_greatest_element(arr: list[float]) -> list[float]: """ Get the Next Greatest Element (NGE) for all elements in a list. Maximum element present after the current one which is also greater than the @@ -53,8 +57,8 @@ def next_greatest_element(arr: list) -> list: >>> next_greatest_element(arr) == expect True """ - stack = [] - result = [-1] * len(arr) + stack: list[float] = [] + result: list[float] = [-1] * len(arr) for index in reversed(range(len(arr))): if len(stack): From 0c15d449f65ed6a116ead601a47604dad6e34c2c Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Thu, 4 Nov 2021 17:27:47 -0300 Subject: [PATCH 2/2] Refactor next_greater_element.py --- .../stacks/next_greater_element.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/data_structures/stacks/next_greater_element.py b/data_structures/stacks/next_greater_element.py index 1429f72e910e..5bab7c609b67 100644 --- a/data_structures/stacks/next_greater_element.py +++ b/data_structures/stacks/next_greater_element.py @@ -14,10 +14,11 @@ def next_greatest_element_slow(arr: list[float]) -> list[float]: """ result = [] + arr_size = len(arr) - for i in range(0, len(arr), 1): + for i in range(arr_size): next: float = -1 - for j in range(i + 1, len(arr), 1): + for j in range(i + 1, arr_size): if arr[i] < arr[j]: next = arr[j] break @@ -57,21 +58,19 @@ def next_greatest_element(arr: list[float]) -> list[float]: >>> next_greatest_element(arr) == expect True """ + arr_size = len(arr) stack: list[float] = [] - result: list[float] = [-1] * len(arr) + result: list[float] = [-1] * arr_size - for index in reversed(range(len(arr))): - if len(stack): + for index in reversed(range(arr_size)): + if stack: while stack[-1] <= arr[index]: stack.pop() - if len(stack) == 0: + if not stack: break - - if len(stack) != 0: + if stack: result[index] = stack[-1] - stack.append(arr[index]) - return result