Skip to content

Commit 499514e

Browse files
committed
feat: add solutions to lc problem: No.0503. Next Greater Element II
1 parent 9c30f0f commit 499514e

File tree

9 files changed

+84
-29
lines changed

9 files changed

+84
-29
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@
150150
- [最近的请求次数](/solution/0900-0999/0933.Number%20of%20Recent%20Calls/README.md)
151151
- [每日温度](/solution/0700-0799/0739.Daily%20Temperatures/README.md)
152152
- [基本计算器 II](/solution/0200-0299/0227.Basic%20Calculator%20II/README.md)
153+
- [下一个更大元素 I](/solution/0400-0499/0496.Next%20Greater%20Element%20I/README.md)
154+
- [下一个更大元素 II](/solution/0500-0599/0503.Next%20Greater%20Element%20II/README.md)
153155

154156
### 动态规划
155157

README_EN.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
144144
- [Number of Recent Calls](/solution/0900-0999/0933.Number%20of%20Recent%20Calls/README_EN.md)
145145
- [Daily Temperatures](/solution/0700-0799/0739.Daily%20Temperatures/README_EN.md)
146146
- [Basic Calculator II](/solution/0200-0299/0227.Basic%20Calculator%20II/README_EN.md)
147+
- [Next Greater Element I](/solution/0400-0499/0496.Next%20Greater%20Element%20I/README_EN.md)
148+
- [Next Greater Element II](/solution/0500-0599/0503.Next%20Greater%20Element%20II/README_EN.md)
147149

148150
### Dynamic Programming
149151

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,14 @@ class Solution {
109109
*/
110110
var nextGreaterElement = function(nums1, nums2) {
111111
let stack = [];
112-
let nextBigger = {};
112+
let nextGreater = {};
113113
for (let num of nums2) {
114-
while(stack.length > 0 && stack[stack.length - 1] < num) {
115-
nextBigger[stack.pop()] = num;
114+
while (stack.length > 0 && stack[stack.length - 1] < num) {
115+
nextGreater[stack.pop()] = num;
116116
}
117117
stack.push(num);
118118
}
119-
let res = nums1.map(d => nextBigger[d] || -1);
119+
let res = nums1.map(d => nextGreater[d] || -1);
120120
return res;
121121
};
122122
```

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ class Solution {
9494
*/
9595
var nextGreaterElement = function(nums1, nums2) {
9696
let stack = [];
97-
let nextBigger = {};
97+
let nextGreater = {};
9898
for (let num of nums2) {
99-
while(stack.length > 0 && stack[stack.length - 1] < num) {
100-
nextBigger[stack.pop()] = num;
99+
while (stack.length > 0 && stack[stack.length - 1] < num) {
100+
nextGreater[stack.pop()] = num;
101101
}
102102
stack.push(num);
103103
}
104-
let res = nums1.map(d => nextBigger[d] || -1);
104+
let res = nums1.map(d => nextGreater[d] || -1);
105105
return res;
106106
};
107107
```

solution/0400-0499/0496.Next Greater Element I/Solution.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
*/
66
var nextGreaterElement = function(nums1, nums2) {
77
let stack = [];
8-
let nextBigger = {};
8+
let nextGreater = {};
99
for (let num of nums2) {
10-
while(stack.length > 0 && stack[stack.length - 1] < num) {
11-
nextBigger[stack.pop()] = num;
10+
while (stack.length > 0 && stack[stack.length - 1] < num) {
11+
nextGreater[stack.pop()] = num;
1212
}
1313
stack.push(num);
1414
}
15-
let res = nums1.map(d => nextBigger[d] || -1);
15+
let res = nums1.map(d => nextGreater[d] || -1);
1616
return res;
1717
};

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,51 @@
2020

2121
<p><strong>注意:</strong> 输入数组的长度不会超过 10000。</p>
2222

23-
2423
## 解法
2524

2625
<!-- 这里可写通用的实现逻辑 -->
2726

27+
“单调栈 + 循环数组”实现。
28+
2829
<!-- tabs:start -->
2930

3031
### **Python3**
3132

3233
<!-- 这里可写当前语言的特殊实现逻辑 -->
3334

3435
```python
35-
36+
class Solution:
37+
def nextGreaterElements(self, nums: List[int]) -> List[int]:
38+
stack = []
39+
n = len(nums)
40+
res = [-1] * n
41+
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)
45+
return res
3646
```
3747

3848
### **Java**
3949

4050
<!-- 这里可写当前语言的特殊实现逻辑 -->
4151

4252
```java
43-
53+
class Solution {
54+
public int[] nextGreaterElements(int[] nums) {
55+
int n = nums.length;
56+
int[] res = new int[n];
57+
Arrays.fill(res, -1);
58+
Deque<Integer> stack = new ArrayDeque<>();
59+
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];
62+
}
63+
stack.push(i % n);
64+
}
65+
return res;
66+
}
67+
}
4468
```
4569

4670
### **...**

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,36 @@ The second 1&#39;s next greater number needs to search circularly, which is also
4242
### **Python3**
4343

4444
```python
45-
45+
class Solution:
46+
def nextGreaterElements(self, nums: List[int]) -> List[int]:
47+
stack = []
48+
n = len(nums)
49+
res = [-1] * n
50+
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)
54+
return res
4655
```
4756

4857
### **Java**
4958

5059
```java
51-
60+
class Solution {
61+
public int[] nextGreaterElements(int[] nums) {
62+
int n = nums.length;
63+
int[] res = new int[n];
64+
Arrays.fill(res, -1);
65+
Deque<Integer> stack = new ArrayDeque<>();
66+
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];
69+
}
70+
stack.push(i % n);
71+
}
72+
return res;
73+
}
74+
}
5275
```
5376

5477
### **...**
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
class Solution {
22
public int[] nextGreaterElements(int[] nums) {
33
int n = nums.length;
4-
int len = (n << 1) - 1;
54
int[] res = new int[n];
5+
Arrays.fill(res, -1);
66
Deque<Integer> stack = new ArrayDeque<>();
7-
for (int i = 0; i < len; ++i) {
8-
int x = nums[i < n ? i : i - n];
9-
while (!stack.isEmpty() && x > nums[stack.peek()]) {
10-
res[stack.pop()] = x;
7+
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];
1110
}
12-
if (i < n) {
13-
stack.push(i);
14-
}
15-
}
16-
while (!stack.isEmpty()) {
17-
res[stack.pop()] = -1;
11+
stack.push(i % n);
1812
}
1913
return res;
2014
}
21-
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def nextGreaterElements(self, nums: List[int]) -> List[int]:
3+
stack = []
4+
n = len(nums)
5+
res = [-1] * n
6+
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)
10+
return res

0 commit comments

Comments
 (0)