8000 window problem · jhideki/rust_leetcode@5e835f0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5e835f0

Browse files
committed
window problem
1 parent 3e96af6 commit 5e835f0

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/main.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
mod minimum_window_substring;
2-
use minimum_window_substring::Solution;
1+
mod sliding_window_max;
2+
use sliding_window_max::Solution;
33
fn main() {
4-
let s1 = "aa".to_string();
5-
let s2 = "aa".to_string();
6-
let result = Solution::min_window(s1, s2);
4+
let nums = vec![1, 3, -1, -3, 5, 3, 6, 7];
5+
let result = Solution::max_sliding_window(nums, 3);
76
print!("{:?}", result);
87
}

src/sliding_window_max.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
pub struct Solution {}
2+
impl Solution {
3+
pub fn max_sliding_window(nums: Vec<i32>, k: i32) -> Vec<i32> {
4+
use std::collections::VecDeque;
5+
let mut result: Vec<i32> = Vec::new();
6+
let mut max: i32 = 0;
7+
let mut deque: VecDeque<usize> = VecDeque::new();
8+
let mut lp = 0;
9+
let mut rp: usize = 0;
10+
while rp < nums.len() {
11+
while !deque.is_empty() && nums[rp] > nums[*deque.front().unwrap()] {
12+
deque.pop_front();
13+
}
14+
deque.push_front(rp);
15+
if !deque.is_empty() && lp > *deque.back().unwrap() {
16+
deque.pop_back();
17+
}
18+
if (rp + 1) as i32 >= k {
19+
result.push(nums[*deque.back().unwrap()]);
20+
lp += 1;
21+
}
22+
rp += 1;
23+
}
24+
result
25+
}
26+
}

0 commit comments

Comments
 (0)
0