Skip to content

Commit 472d3d6

Browse files
committed
feat: add solutions to lc problem: No.0503.Next Greater Element II
1 parent 4b3001d commit 472d3d6

File tree

7 files changed

+147
-25
lines changed

7 files changed

+147
-25
lines changed

solution/0400-0499/0496.Next Greater Element I/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
先对将 nums2 中的每一个元素,求出其下一个更大的元素。随后对于将这些答案放入哈希映射(HashMap)中,再遍历数组 nums1,并直接找出答案。对于 nums2,可以使用单调栈来解决这个问题。
5757

58-
单调栈常见模型:找出每个数左边离它最近的比它大/小的数。模板:
58+
单调栈常见模型:找出每个数左/右边**离它最近的****比它大/小的数**。模板:
5959

6060
```python
6161
stk = []

solution/0500-0599/0503.Next Greater Element II/README.md

+52-8
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@
3535
```python
3636
class Solution:
3737
def nextGreaterElements(self, nums: List[int]) -> List[int]:
38-
stack = []
3938
n = len(nums)
4039
res = [-1] * n
40+
stk = []
4141
for i in range(n << 1):
42-
while stack and nums[stack[-1]] < nums[i % n]:
43-
res[stack.pop()] = nums[i % n]
44-
stack.append(i % n)
42+
while stk and nums[stk[-1]] < nums[i % n]:
43+
res[stk.pop()] = nums[i % n]
44+
stk.append(i % n)
4545
return res
4646
```
4747

@@ -55,12 +55,12 @@ class Solution {
5555
int n = nums.length;
5656
int[] res = new int[n];
5757
Arrays.fill(res, -1);
58-
Deque<Integer> stack = new ArrayDeque<>();
58+
Deque<Integer> stk = new ArrayDeque<>();
5959
for (int i = 0; i < (n << 1); ++i) {
60-
while (!stack.isEmpty() && nums[stack.peek()] < nums[i % n]) {
61-
res[stack.pop()] = nums[i % n];
60+
while (!stk.isEmpty() && nums[stk.peek()] < nums[i % n]) {
61+
res[stk.pop()] = nums[i % n];
6262
}
63-
stack.push(i % n);
63+
stk.push(i % n);
6464
}
6565
return res;
6666
}
@@ -89,6 +89,50 @@ class Solution {
8989
};
9090
```
9191

92+
### **C++**
93+
94+
```cpp
95+
class Solution {
96+
public:
97+
vector<int> nextGreaterElements(vector<int> &nums) {
98+
int n = nums.size();
99+
vector<int> res(n, -1);
100+
stack<int> stk;
101+
for (int i = 0; i < (n << 1); ++i)
102+
{
103+
while (!stk.empty() && nums[stk.top()] < nums[i % n])
104+
{
105+
res[stk.top()] = nums[i % n];
106+
stk.pop();
107+
}
108+
stk.push(i % n);
109+
}
110+
return res;
111+
}
112+
};
113+
```
114+
115+
### **Go**
116+
117+
```go
118+
func nextGreaterElements(nums []int) []int {
119+
n := len(nums)
120+
res := make([]int, n)
121+
for i := range res {
122+
res[i] = -1
123+
}
124+
var stk []int
125+
for i := 0; i < (n << 1); i++ {
126+
for len(stk) > 0 && nums[stk[len(stk)-1]] < nums[i%n] {
127+
res[stk[len(stk)-1]] = nums[i%n]
128+
stk = stk[:len(stk)-1]
129+
}
130+
stk = append(stk, i%n)
131+
}
132+
return res
133+
}
134+
```
135+
92136
### **...**
93137

94138
```

solution/0500-0599/0503.Next Greater Element II/README_EN.md

+52-8
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ The second 1&#39;s next greater number needs to search circularly, which is also
4444
```python
4545
class Solution:
4646
def nextGreaterElements(self, nums: List[int]) -> List[int]:
47-
stack = []
4847
n = len(nums)
4948
res = [-1] * n
49+
stk = []
5050
for i in range(n << 1):
51-
while stack and nums[stack[-1]] < nums[i % n]:
52-
res[stack.pop()] = nums[i % n]
53-
stack.append(i % n)
51+
while stk and nums[stk[-1]] < nums[i % n]:
52+
res[stk.pop()] = nums[i % n]
53+
stk.append(i % n)
5454
return res
5555
```
5656

@@ -62,12 +62,12 @@ class Solution {
6262
int n = nums.length;
6363
int[] res = new int[n];
6464
Arrays.fill(res, -1);
65-
Deque<Integer> stack = new ArrayDeque<>();
65+
Deque<Integer> stk = new ArrayDeque<>();
6666
for (int i = 0; i < (n << 1); ++i) {
67-
while (!stack.isEmpty() && nums[stack.peek()] < nums[i % n]) {
68-
res[stack.pop()] = nums[i % n];
67+
while (!stk.isEmpty() && nums[stk.peek()] < nums[i % n]) {
68+
res[stk.pop()] = nums[i % n];
6969
}
70-
stack.push(i % n);
70+
stk.push(i % n);
7171
}
7272
return res;
7373
}
@@ -96,6 +96,50 @@ class Solution {
9696
};
9797
```
9898

99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
vector<int> nextGreaterElements(vector<int> &nums) {
105+
int n = nums.size();
106+
vector<int> res(n, -1);
107+
stack<int> stk;
108+
for (int i = 0; i < (n << 1); ++i)
109+
{
110+
while (!stk.empty() && nums[stk.top()] < nums[i % n])
111+
{
112+
res[stk.top()] = nums[i % n];
113+
stk.pop();
114+
}
115+
stk.push(i % n);
116+
}
117+
return res;
118+
}
119+
};
120+
```
121+
122+
### **Go**
123+
124+
```go
125+
func nextGreaterElements(nums []int) []int {
126+
n := len(nums)
127+
res := make([]int, n)
128+
for i := range res {
129+
res[i] = -1
130+
}
131+
var stk []int
132+
for i := 0; i < (n << 1); i++ {
133+
for len(stk) > 0 && nums[stk[len(stk)-1]] < nums[i%n] {
134+
res[stk[len(stk)-1]] = nums[i%n]
135+
stk = stk[:len(stk)-1]
136+
}
137+
stk = append(stk, i%n)
138+
}
139+
return res
140+
}
141+
```
142+
99143
### **...**
100144

101145
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
vector<int> nextGreaterElements(vector<int> &nums) {
4+
int n = nums.size();
5+
vector<int> res(n, -1);
6+
stack<int> stk;
7+
for (int i = 0; i < (n << 1); ++i)
8+
{
9+
while (!stk.empty() && nums[stk.top()] < nums[i % n])
10+
{
11+
res[stk.top()] = nums[i % n];
12+
stk.pop();
13+
}
14+
stk.push(i % n);
15+
}
16+
return res;
17+
}
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func nextGreaterElements(nums []int) []int {
2+
n := len(nums)
3+
res := make([]int, n)
4+
for i := range res {
5+
res[i] = -1
6+
}
7+
var stk []int
8+
for i := 0; i < (n << 1); i++ {
9+
for len(stk) > 0 && nums[stk[len(stk)-1]] < nums[i%n] {
10+
res[stk[len(stk)-1]] = nums[i%n]
11+
stk = stk[:len(stk)-1]
12+
}
13+
stk = append(stk, i%n)
14+
}
15+
return res
16+
}

solution/0500-0599/0503.Next Greater Element II/Solution.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ public int[] nextGreaterElements(int[] nums) {
33
int n = nums.length;
44
int[] res = new int[n];
55
Arrays.fill(res, -1);
6-
Deque<Integer> stack = new ArrayDeque<>();
6+
Deque<Integer> stk = new ArrayDeque<>();
77
for (int i = 0; i < (n << 1); ++i) {
8-
while (!stack.isEmpty() && nums[stack.peek()] < nums[i % n]) {
9-
res[stack.pop()] = nums[i % n];
8+
while (!stk.isEmpty() && nums[stk.peek()] < nums[i % n]) {
9+
res[stk.pop()] = nums[i % n];
1010
}
11-
stack.push(i % n);
11+
stk.push(i % n);
1212
}
1313
return res;
1414
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
class Solution:
22
def nextGreaterElements(self, nums: List[int]) -> List[int]:
3-
stack = []
43
n = len(nums)
54
res = [-1] * n
5+
stk = []
66
for i in range(n << 1):
7-
while stack and nums[stack[-1]] < nums[i % n]:
8-
res[stack.pop()] = nums[i % n]
9-
stack.append(i % n)
7+
while stk and nums[stk[-1]] < nums[i % n]:
8+
res[stk.pop()] = nums[i % n]
9+
stk.append(i % n)
1010
return res

0 commit comments

Comments
 (0)