Skip to content

Commit defa442

Browse files
committed
feat: update solutions to lc problems
* No.0496.Next Greater Element I * No.2273.Find Resultant Array After Removing Anagrams * No.2274.Maximum Consecutive Floors Without Special Floors * No.2275.Largest Combination With Bitwise AND Greater Than Zero * No.2276.Count Integers in Intervals
1 parent 15001cc commit defa442

File tree

21 files changed

+358
-114
lines changed

21 files changed

+358
-114
lines changed

README.md

+8-9
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,13 @@
5151
- [合并区间](/solution/0000-0099/0056.Merge%20Intervals/README.md) - `区间合并`
5252
<!-- 排序算法、待补充 -->
5353

54-
<!--
5554
### 2. 数据结构
5655

5756
- [设计链表](/solution/0700-0799/0707.Design%20Linked%20List/README.md) - `单链表``指针引用``数组实现`
58-
-->
59-
57+
- [下一个更大元素 I](/solution/0400-0499/0496.Next%20Greater%20Element%20I/README.md) - `单调栈`
58+
- [每日温度](/solution/0700-0799/0739.Daily%20Temperatures/README.md) - `单调栈`
6059

61-
### 2. 搜索
60+
### 3. 搜索
6261

6362
- [图像渲染](/solution/0700-0799/0733.Flood%20Fill/README.md)- `BFS``DFS``Flood Fill 算法``连通性模型`
6463
- [岛屿数量](/solution/0200-0299/0200.Number%20of%20Islands/README.md) - `BFS``Flood Fill 算法`
@@ -75,12 +74,12 @@
7574
- [访问所有节点的最短路径](/solution/0800-0899/0847.Shortest%20Path%20Visiting%20All%20Nodes/README.md) - `BFS``最小步数模型``A* 算法`
7675
- [为高尔夫比赛砍树](/solution/0600-0699/0675.Cut%20Off%20Trees%20for%20Golf%20Event/README.md) - `BFS``A* 算法`
7776
- [使网格图至少有一条有效路径的最小代价](/solution/1300-1399/1368.Minimum%20Cost%20to%20Make%20at%20Least%20One%20Valid%20Path%20in%20a%20Grid/README.md) - `双端队列 BFS`
78-
- [迷宫](/solution/0400-0499/0490.The%20Maze/README.md) -` DFS``连通性模型``Flood Fill 算法`
77+
- [迷宫](/solution/0400-0499/0490.The%20Maze/README.md) - `DFS``连通性模型``Flood Fill 算法`
7978
- [单词搜索](/solution/0000-0099/0079.Word%20Search/README.md) - `DFS``搜索顺序``回溯`
8079
- [黄金矿工](/solution/1200-1299/1219.Path%20with%20Maximum%20Gold/README.md) - `DFS``搜索顺序``回溯`
8180
<!-- DFS 待补充 -->
8281

83-
### 3. 动态规划(DP)
82+
### 4. 动态规划(DP)
8483

8584
- [杨辉三角](/solution/0100-0199/0118.Pascal's%20Triangle/README.md) - `线性 DP``数字三角形模型`
8685
- [最小路径和](/solution/0000-0099/0064.Minimum%20Path%20Sum/README.md) - `线性 DP``数字三角形模型`
@@ -102,7 +101,7 @@
102101
- [组合总和 Ⅳ](/solution/0300-0399/0377.Combination%20Sum%20IV/README.md) - `完全背包问题`
103102
<!-- 背包问题、状态机模型、状压DP、区间DP、树形DP、数位DP 待补充 -->
104103

105-
### 4. 高级数据结构
104+
### 5. 高级数据结构
106105

107106
- [二维网格图中探测环](/solution/1500-1599/1559.Detect%20Cycles%20in%202D%20Grid/README.md) - `并查集``检测环`
108107
- [除法求值](/solution/0300-0399/0399.Evaluate%20Division/README.md) - `并查集``权值维护`
@@ -129,7 +128,7 @@
129128
- [由单个字符重复的最长子字符串](/solution/2200-2299/2213.Longest%20Substring%20of%20One%20Repeating%20Character/README.md) - `线段树``动态最大子段和模型`
130129
- [矩形面积 II](/solution/0800-0899/0850.Rectangle%20Area%20II/README.md) - `线段树``离散化``扫描线`
131130

132-
### 5. 图论
131+
### 6. 图论
133132

134133
- [网络延迟时间](/solution/0700-0799/0743.Network%20Delay%20Time/README.md) - `最短路``Dijkstra 算法``Bellman Ford 算法``SPFA 算法`
135134
- [连接所有点的最小费用](/solution/1500-1599/1584.Min%20Cost%20to%20Connect%20All%20Points/README.md) - `最小生成树``Prim 算法``Kruskal 算法`
@@ -139,7 +138,7 @@
139138
- [判断二分图](/solution/0700-0799/0785.Is%20Graph%20Bipartite/README.md) - `染色法判定二分图``并查集`
140139

141140
<!-- 待补充
142-
### 6. 数学知识
141+
### 7. 数学知识
143142
-->
144143

145144
## 加入我们

README_EN.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
4949
- [Number of 1 Bits](/solution/0100-0199/0191.Number%20of%201%20Bits/README_EN.md) - `Bit manipulation`, `Lowbit`
5050
- [Merge Intervals](/solution/0000-0099/0056.Merge%20Intervals/README_EN.md) - `Merge intervals`
5151

52-
<!--
5352
### 2. Data Structures
5453

5554
- [Design Linked List](/solution/0700-0799/0707.Design%20Linked%20List/README_EN.md) - `Linked List`, `Pointer`, `Array`
56-
-->
55+
- [Next Greater Element I](/solution/0400-0499/0496.Next%20Greater%20Element%20I/README_EN.md) - `Monotonic Stack`
56+
- [Daily Temperatures](/solution/0700-0799/0739.Daily%20Temperatures/README_EN.md) - `Monotonic Stack`
5757

58-
### 2. Search
58+
### 3. Search
5959

6060
- [Flood Fill](/solution/0700-0799/0733.Flood%20Fill/README_EN.md) - `BFS`, `DFS`, `Flood fill`
6161
- [Number of Islands](/solution/0200-0299/0200.Number%20of%20Islands/README_EN.md) - `BFS`, `Flood fill`
@@ -76,7 +76,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
7676
- [Word Search](/solution/0000-0099/0079.Word%20Search/README_EN.md) - `DFS`, `Backtracking`
7777
- [Path with Maximum Gold](/solution/1200-1299/1219.Path%20with%20Maximum%20Gold/README_EN.md) - `DFS`, `Backtracking`
7878

79-
### 3. Dynamic Programming(DP)
79+
### 4. Dynamic Programming(DP)
8080

8181
- [Pascal's Triangle](/solution/0100-0199/0118.Pascal's%20Triangle/README_EN.md) - `Linear problem`
8282
- [Minimum Path Sum](/solution/0000-0099/0064.Minimum%20Path%20Sum/README_EN.md) - `Linear problem`
@@ -97,7 +97,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
9797
- [Coin Change](/solution/0300-0399/0322.Coin%20Change/README_EN.md) - `Unbounded Knapsack problem`
9898
- [Combination Sum IV](/solution/0300-0399/0377.Combination%20Sum%20IV/README_EN.md) - `Unbounded Knapsack problem`
9999

100-
### 4. Advanced Data Structures
100+
### 5. Advanced Data Structures
101101

102102
- [Detect Cycles in 2D Grid](/solution/1500-1599/1559.Detect%20Cycles%20in%202D%20Grid/README_EN.md) - `Union find`, `Detect cycles`
103103
- [Evaluate Division](/solution/0300-0399/0399.Evaluate%20Division/README_EN.md) - `Union find`
@@ -124,7 +124,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
124124
- [Longest Substring of One Repeating Character](/solution/2200-2299/2213.Longest%20Substring%20of%20One%20Repeating%20Character/README_EN.md) - `Segment Tree`
125125
- [Rectangle Area II](/solution/0800-0899/0850.Rectangle%20Area%20II/README_EN.md) - `Segment Tree`, `Discretization`, `Line Sweep`
126126

127-
### 5. Graph Theory
127+
### 6. Graph Theory
128128

129129
- [Network Delay Time](/solution/0700-0799/0743.Network%20Delay%20Time/README_EN.md) - `Shortest Path`, `Dijkstra's algorithm`, `Bellman Ford's algorithm`, `SPFA`
130130
- [Min Cost to Connect All Points](/solution/1500-1599/1584.Min%20Cost%20to%20Connect%20All%20Points/README_EN.md) - `Minimum Spanning Tree`, `Prim's algorithm`, `Kruskal's algorithm`, `Union find`
@@ -134,7 +134,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
134134
- [Is Graph Bipartite?](/solution/0700-0799/0785.Is%20Graph%20Bipartite/README_EN.md) - `Graph coloring`, `Union find`
135135

136136
<!--
137-
### 6. Mathematical Knowledge
137+
### 7. Mathematical Knowledge
138138
-->
139139

140140
## Contributions

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

+34-32
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

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

6062
单调栈常见模型:找出每个数左/右边**离它最近的****比它大/小的数**。模板:
@@ -76,13 +78,13 @@ for i in range(n):
7678
```python
7779
class Solution:
7880
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
79-
mp = {}
81+
m = {}
8082
stk = []
81-
for num in nums2:
82-
while stk and stk[-1] < num:
83-
mp[stk.pop()] = num
84-
stk.append(num)
85-
return [mp.get(num, -1) for num in nums1]
83+
for v in nums2:
84+
while stk and stk[-1] < v:
85+
m[stk.pop()] = v
86+
stk.append(v)
87+
return [m.get(v, -1) for v in nums1]
8688
```
8789

8890
### **Java**
@@ -93,17 +95,17 @@ class Solution:
9395
class Solution {
9496
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
9597
Deque<Integer> stk = new ArrayDeque<>();
96-
Map<Integer, Integer> mp = new HashMap<>();
97-
for (int num : nums2) {
98-
while (!stk.isEmpty() && stk.peek() < num) {
99-
mp.put(stk.pop(), num);
98+
Map<Integer, Integer> m = new HashMap<>();
99+
for (int v : nums2) {
100+
while (!stk.isEmpty() && stk.peek() < v) {
101+
m.put(stk.pop(), v);
100102
}
101-
stk.push(num);
103+
stk.push(v);
102104
}
103105
int n = nums1.length;
104106
int[] ans = new int[n];
105107
for (int i = 0; i < n; ++i) {
106-
ans[i] = mp.getOrDefault(nums1[i], -1);
108+
ans[i] = m.getOrDefault(nums1[i], -1);
107109
}
108110
return ans;
109111
}
@@ -120,14 +122,14 @@ class Solution {
120122
*/
121123
var nextGreaterElement = function (nums1, nums2) {
122124
let stk = [];
123-
let nextGreater = {};
124-
for (let num of nums2) {
125-
while (stk && stk[stk.length - 1] < num) {
126-
nextGreater[stk.pop()] = num;
125+
let m = {};
126+
for (let v of nums2) {
127+
while (stk && stk[stk.length - 1] < v) {
128+
m[stk.pop()] = v;
127129
}
128-
stk.push(num);
130+
stk.push(v);
129131
}
130-
return nums1.map(e => nextGreater[e] || -1);
132+
return nums1.map(e => m[e] || -1);
131133
};
132134
```
133135

@@ -138,18 +140,18 @@ class Solution {
138140
public:
139141
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
140142
stack<int> stk;
141-
unordered_map<int, int> mp;
142-
for (int num : nums2)
143+
unordered_map<int, int> m;
144+
for (int& v : nums2)
143145
{
144-
while (!stk.empty() && stk.top() < num)
146+
while (!stk.empty() && stk.top() < v)
145147
{
146-
mp[stk.top()] = num;
148+
m[stk.top()] = v;
147149
stk.pop();
148150
}
149-
stk.push(num);
151+
stk.push(v);
150152
}
151153
vector<int> ans;
152-
for (int num : nums1) ans.push_back(mp.count(num) ? mp[num] : -1);
154+
for (int& v : nums1) ans.push_back(m.count(v) ? m[v] : -1);
153155
return ans;
154156
}
155157
};
@@ -159,18 +161,18 @@ public:
159161
160162
```go
161163
func nextGreaterElement(nums1 []int, nums2 []int) []int {
162-
var stk []int
163-
mp := make(map[int]int)
164-
for _, num := range nums2 {
165-
for len(stk) > 0 && stk[len(stk)-1] < num {
166-
mp[stk[len(stk)-1]] = num
164+
stk := []int{}
165+
m := map[int]int{}
166+
for _, v := range nums2 {
167+
for len(stk) > 0 && stk[len(stk)-1] < v {
168+
m[stk[len(stk)-1]] = v
167169
stk = stk[:len(stk)-1]
168170
}
169-
stk = append(stk, num)
171+
stk = append(stk, v)
170172
}
171173
var ans []int
172-
for _, num := range nums1 {
173-
val, ok := mp[num]
174+
for _, v := range nums1 {
175+
val, ok := m[v]
174176
if !ok {
175177
val = -1
176178
}

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

+32-32
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@
5656
```python
5757
class Solution:
5858
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
59-
mp = {}
59+
m = {}
6060
stk = []
61-
for num in nums2:
62-
while stk and stk[-1] < num:
63-
mp[stk.pop()] = num
64-
stk.append(num)
65-
return [mp.get(num, -1) for num in nums1]
61+
for v in nums2:
62+
while stk and stk[-1] < v:
63+
m[stk.pop()] = v
64+
stk.append(v)
65+
return [m.get(v, -1) for v in nums1]
6666
```
6767

6868
### **Java**
@@ -71,17 +71,17 @@ class Solution:
7171
class Solution {
7272
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
7373
Deque<Integer> stk = new ArrayDeque<>();
74-
Map<Integer, Integer> mp = new HashMap<>();
75-
for (int num : nums2) {
76-
while (!stk.isEmpty() && stk.peek() < num) {
77-
mp.put(stk.pop(), num);
74+
Map<Integer, Integer> m = new HashMap<>();
75+
for (int v : nums2) {
76+
while (!stk.isEmpty() && stk.peek() < v) {
77+
m.put(stk.pop(), v);
7878
}
79-
stk.push(num);
79+
stk.push(v);
8080
}
8181
int n = nums1.length;
8282
int[] ans = new int[n];
8383
for (int i = 0; i < n; ++i) {
84-
ans[i] = mp.getOrDefault(nums1[i], -1);
84+
ans[i] = m.getOrDefault(nums1[i], -1);
8585
}
8686
return ans;
8787
}
@@ -98,14 +98,14 @@ class Solution {
9898
*/
9999
var nextGreaterElement = function (nums1, nums2) {
100100
let stk = [];
101-
let nextGreater = {};
102-
for (let num of nums2) {
103-
while (stk && stk[stk.length - 1] < num) {
104-
nextGreater[stk.pop()] = num;
101+
let m = {};
102+
for (let v of nums2) {
103+
while (stk && stk[stk.length - 1] < v) {
104+
m[stk.pop()] = v;
105105
}
106-
stk.push(num);
106+
stk.push(v);
107107
}
108-
return nums1.map(e => nextGreater[e] || -1);
108+
return nums1.map(e => m[e] || -1);
109109
};
110110
```
111111

@@ -116,18 +116,18 @@ class Solution {
116116
public:
117117
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
118118
stack<int> stk;
119-
unordered_map<int, int> mp;
120-
for (int num : nums2)
119+
unordered_map<int, int> m;
120+
for (int& v : nums2)
121121
{
122-
while (!stk.empty() && stk.top() < num)
122+
while (!stk.empty() && stk.top() < v)
123123
{
124-
mp[stk.top()] = num;
124+
m[stk.top()] = v;
125125
stk.pop();
126126
}
127-
stk.push(num);
127+
stk.push(v);
128128
}
129129
vector<int> ans;
130-
for (int num : nums1) ans.push_back(mp.count(num) ? mp[num] : -1);
130+
for (int& v : nums1) ans.push_back(m.count(v) ? m[v] : -1);
131131
return ans;
132132
}
133133
};
@@ -137,18 +137,18 @@ public:
137137
138138
```go
139139
func nextGreaterElement(nums1 []int, nums2 []int) []int {
140-
var stk []int
141-
mp := make(map[int]int)
142-
for _, num := range nums2 {
143-
for len(stk) > 0 && stk[len(stk)-1] < num {
144-
mp[stk[len(stk)-1]] = num
140+
stk := []int{}
141+
m := map[int]int{}
142+
for _, v := range nums2 {
143+
for len(stk) > 0 && stk[len(stk)-1] < v {
144+
m[stk[len(stk)-1]] = v
145145
stk = stk[:len(stk)-1]
146146
}
147-
stk = append(stk, num)
147+
stk = append(stk, v)
148148
}
149149
var ans []int
150-
for _, num := range nums1 {
151-
val, ok := mp[num]
150+
for _, v := range nums1 {
151+
val, ok := m[v]
152152
if !ok {
153153
val = -1
154154
}

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ class Solution {
22
public:
33
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
44
stack<int> stk;
5-
unordered_map<int, int> mp;
6-
for (int num : nums2)
5+
unordered_map<int, int> m;
6+
for (int& v : nums2)
77
{
8-
while (!stk.empty() && stk.top() < num)
8+
while (!stk.empty() && stk.top() < v)
99
{
10-
mp[stk.top()] = num;
10+
m[stk.top()] = v;
1111
stk.pop();
1212
}
13-
stk.push(num);
13+
stk.push(v);
1414
}
1515
vector<int> ans;
16-
for (int num : nums1) ans.push_back(mp.count(num) ? mp[num] : -1);
16+
for (int& v : nums1) ans.push_back(m.count(v) ? m[v] : -1);
1717
return ans;
1818
}
1919
};

0 commit comments

Comments
 (0)