-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy path503.next-greater-element-ii.py
72 lines (60 loc) · 1.92 KB
/
503.next-greater-element-ii.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Tag: Array, Stack, Monotonic Stack
# Time: O(N)
# Space: O(N)
# Ref: -
# Note: -
# Given a circular integer array nums (i.e., the next element of nums[nums.length - 1] is nums[0]), return the next greater number for every element in nums.
# The next greater number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, return -1 for this number.
#
# Example 1:
#
# Input: nums = [1,2,1]
# Output: [2,-1,2]
# Explanation: The first 1's next greater number is 2;
# The number 2 can't find next greater number.
# The second 1's next greater number needs to search circularly, which is also 2.
#
# Example 2:
#
# Input: nums = [1,2,3,4,3]
# Output: [2,3,4,-1,4]
#
#
# Constraints:
#
# 1 <= nums.length <= 104
# -109 <= nums[i] <= 109
#
#
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
res = [-1 for i in range(n)]
stack = []
nums = nums
for i in range(n * 2):
cur = i % n
while len(stack) > 0 and nums[cur] > nums[stack[-1]]:
j = stack[-1]
stack.pop()
res[j] = nums[cur]
stack.append(cur)
return res
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
res = [-1 for i in range(n)]
stack = []
nums = nums
for i in range(n):
while len(stack) > 0 and nums[i] > nums[stack[-1]]:
j = stack[-1]
stack.pop()
res[j] = nums[i]
stack.append(i)
for i in range(n):
while len(stack) > 0 and nums[i] > nums[stack[-1]]:
j = stack[-1]
stack.pop()
res[j] = nums[i]
return res