Skip to content

Commit 03159c0

Browse files
committed
feat: update solutions to lcof problems: No. 59 - I,59 - II
1 parent bbb62f3 commit 03159c0

File tree

6 files changed

+226
-0
lines changed

6 files changed

+226
-0
lines changed

lcof/面试题59 - I. 滑动窗口的最大值/README.md

+48
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,54 @@ var maxSlidingWindow = function (nums, k) {
122122
};
123123
```
124124

125+
### **C++**
126+
127+
```cpp
128+
class Solution {
129+
public:
130+
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
131+
vector<int> ans;
132+
deque<int> window;
133+
int n = nums.size();
134+
for (int i = 0; i < n; ++i) {
135+
while (!window.empty() && nums[window.back()] <= nums[i]) {
136+
window.pop_back();
137+
}
138+
window.push_back(i);
139+
if (window.front() == i - k) {
140+
window.pop_front();
141+
}
142+
if (i >= k - 1) {
143+
ans.push_back(nums[window.front()]);
144+
}
145+
}
146+
return ans;
147+
}
148+
};
149+
```
150+
151+
### **Go**
152+
153+
```go
154+
func maxSlidingWindow(nums []int, k int) []int {
155+
ans := make([]int, 0, len(nums)-k+1)
156+
window := make([]int, 0)
157+
for i, num := range nums {
158+
for len(window) != 0 && nums[window[len(window)-1]] <= num {
159+
window = window[:len(window)-1]
160+
}
161+
window = append(window, i)
162+
if window[0] == i-k {
163+
window = window[1:]
164+
}
165+
if i >= k-1 {
166+
ans = append(ans, nums[window[0]])
167+
}
168+
}
169+
return ans
170+
}
171+
```
172+
125173
### **...**
126174

127175
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
4+
vector<int> ans;
5+
deque<int> window;
6+
int n = nums.size();
7+
for (int i = 0; i < n; ++i) {
8+
while (!window.empty() && nums[window.back()] <= nums[i]) {
9+
window.pop_back();
10+
}
11+
window.push_back(i);
12+
if (window.front() == i - k) {
13+
window.pop_front();
14+
}
15+
if (i >= k - 1) {
16+
ans.push_back(nums[window.front()]);
17+
}
18+
}
19+
return ans;
20+
}
21+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
func maxSlidingWindow(nums []int, k int) []int {
2+
ans := make([]int, 0, len(nums)-k+1)
3+
window := make([]int, 0)
4+
for i, num := range nums {
5+
for len(window) != 0 && nums[window[len(window)-1]] <= num {
6+
window = window[:len(window)-1]
7+
}
8+
window = append(window, i)
9+
if window[0] == i-k {
10+
window = window[1:]
11+
}
12+
if i >= k-1 {
13+
ans = append(ans, nums[window[0]])
14+
}
15+
}
16+
return ans
17+
}

lcof/面试题59 - II. 队列的最大值/README.md

+75
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,81 @@ MaxQueue.prototype.pop_front = function () {
173173
};
174174
```
175175

176+
### **C++**
177+
178+
```cpp
179+
class MaxQueue {
180+
private:
181+
queue<int> q;
182+
deque<int> d;
183+
184+
public:
185+
MaxQueue() {}
186+
187+
int max_value() {
188+
if (d.empty()) return -1;
189+
return d.front();
190+
}
191+
192+
void push_back(int value) {
193+
while (!d.empty() && d.back() < value) d.pop_back();
194+
d.push_back(value);
195+
q.push(value);
196+
}
197+
198+
int pop_front() {
199+
if (d.empty()) return -1;
200+
int retVal = q.front();
201+
q.pop();
202+
if (d.front() == retVal) d.pop_front();
203+
return retVal;
204+
}
205+
};
206+
```
207+
208+
### **Go**
209+
210+
```go
211+
type MaxQueue struct {
212+
queue []int
213+
deque []int
214+
}
215+
216+
func Constructor() MaxQueue {
217+
return MaxQueue{
218+
queue: make([]int, 0),
219+
deque: make([]int, 0),
220+
}
221+
}
222+
223+
func (this *MaxQueue) Max_value() int {
224+
if len(this.deque) == 0 {
225+
return -1
226+
}
227+
return this.deque[0]
228+
}
229+
230+
func (this *MaxQueue) Push_back(value int) {
231+
for len(this.deque) != 0 && this.deque[len(this.deque)-1] < value {
232+
this.deque = this.deque[:len(this.deque)-1]
233+
}
234+
this.deque = append(this.deque, value)
235+
this.queue = append(this.queue, value)
236+
}
237+
238+
func (this *MaxQueue) Pop_front() int {
239+
if len(this.deque) == 0 {
240+
return -1
241+
}
242+
retVal := this.queue[0]
243+
this.queue = this.queue[1:]
244+
if this.deque[0] == retVal {
245+
this.deque = this.deque[1:]
246+
}
247+
return retVal
248+
}
249+
```
250+
176251
### **...**
177252

178253
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class MaxQueue {
2+
private:
3+
queue<int> q;
4+
deque<int> d;
5+
6+
public:
7+
MaxQueue() {}
8+
9+
int max_value() {
10+
if (d.empty()) return -1;
11+
return d.front();
12+
}
13+
14+
void push_back(int value) {
15+
while (!d.empty() && d.back() < value) d.pop_back();
16+
d.push_back(value);
17+
q.push(value);
18+
}
19+
20+
int pop_front() {
21+
if (d.empty()) return -1;
22+
int retVal = q.front();
23+
q.pop();
24+
if (d.front() == retVal) d.pop_front();
25+
return retVal;
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
type MaxQueue struct {
2+
queue []int
3+
deque []int
4+
}
5+
6+
func Constructor() MaxQueue {
7+
return MaxQueue{
8+
queue: make([]int, 0),
9+
deque: make([]int, 0),
10+
}
11+
}
12+
13+
func (this *MaxQueue) Max_value() int {
14+
if len(this.deque) == 0 {
15+
return -1
16+
}
17+
return this.deque[0]
18+
}
19+
20+
func (this *MaxQueue) Push_back(value int) {
21+
for len(this.deque) != 0 && this.deque[len(this.deque)-1] < value {
22+
this.deque = this.deque[:len(this.deque)-1]
23+
}
24+
this.deque = append(this.deque, value)
25+
this.queue = append(this.queue, value)
26+
}
27+
28+
func (this *MaxQueue) Pop_front() int {
29+
if len(this.deque) == 0 {
30+
return -1
31+
}
32+
retVal := this.queue[0]
33+
this.queue = this.queue[1:]
34+
if this.deque[0] == retVal {
35+
this.deque = this.deque[1:]
36+
}
37+
return retVal
38+
}

0 commit comments

Comments
 (0)