Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 04dd0ec

Browse files
Merge branch 'master' of github.com:jinbudaily/leetcode-master
2 parents 4760924 + 1340cc3 commit 04dd0ec

File tree

4 files changed

+175
-0
lines changed

4 files changed

+175
-0
lines changed

‎problems/0042.接雨水.md‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,56 @@ int trap(int* height, int heightSize) {
926926
* 空间复杂度 O(1)
927927
928928
929+
Rust
930+
931+
双指针
932+
933+
```rust
934+
impl Solution {
935+
pub fn trap(height: Vec<i32>) -> i32 {
936+
let n = height.len();
937+
let mut max_left = vec![0; height.len()];
938+
let mut max_right = vec![0; height.len()];
939+
max_left.iter_mut().zip(max_right.iter_mut().rev()).enumerate().fold((0, 0), |(lm, rm), (idx, (x, y))| {
940+
let lmax = lm.max(height[idx]);
941+
let rmax = rm.max(height[n - 1 - idx]);
942+
*x = lmax; *y = rmax;
943+
(lmax, rmax)
944+
});
945+
height.iter().enumerate().fold(0, |acc, (idx, x)| {
946+
let h = max_left[idx].min(max_right[idx]);
947+
if h > 0 { h - x + acc } else { acc }
948+
})
949+
}
950+
}
951+
```
952+
953+
单调栈
954+
955+
```rust
956+
impl Solution {
957+
pub fn trap(height: Vec<i32>) -> i32 {
958+
let mut stack = vec![];
959+
let mut ans = 0;
960+
for (right_pos, &right_h) in height.iter().enumerate() {
961+
while !stack.is_empty() && height[*stack.last().unwrap()] <= right_h {
962+
let mid_pos = stack.pop().unwrap();
963+
if !stack.is_empty() {
964+
let left_pos = *stack.last().unwrap();
965+
let left_h = height[left_pos];
966+
let top = std::cmp::min(left_h, right_h);
967+
if top > height[mid_pos] {
968+
ans += (top - height[mid_pos]) * (right_pos - left_pos - 1) as i32;
969+
}
970+
}
971+
}
972+
stack.push(right_pos);
973+
}
974+
ans
975+
}
976+
}
977+
```
978+
929979
<p align="center">
930980
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
931981
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>

‎problems/0059.螺旋矩阵II.md‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,58 @@ public class Solution {
688688
}
689689
```
690690

691+
### Ruby#:
692+
```ruby
693+
def generate_matrix(n)
694+
result = Array.new(n) { Array.new(n, 0) }
695+
#循环次数
696+
loop_times = 0
697+
#步长
698+
step = n - 1
699+
val = 1
700+
701+
702+
while loop_times < n / 2
703+
#模拟从左向右
704+
for i in 0..step - 1
705+
#行数不变,列数变
706+
result[loop_times][i+loop_times] = val
707+
val += 1
708+
end
709+
710+
#模拟从上到下
711+
for i in 0..step - 1
712+
#列数不变,行数变
713+
result[i+loop_times][n-loop_times-1] = val
714+
val += 1
715+
end
716+
717+
#模拟从右到左
718+
for i in 0..step - 1
719+
#行数不变,列数变
720+
result[n-loop_times-1][n-loop_times-i-1] = val
721+
val += 1
722+
end
723+
724+
#模拟从下到上
725+
for i in 0..step - 1
726+
#列数不变,行数变
727+
result[n-loop_times-i-1][loop_times] = val
728+
val += 1
729+
end
730+
731+
loop_times += 1
732+
step -= 2
733+
end
734+
735+
#如果是奇数,则填充最后一个元素
736+
result[n/2][n/2] = n**2 if n % 2
737+
738+
return result
739+
740+
end
741+
```
742+
691743
<p align="center">
692744
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
693745
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>

‎problems/0084.柱状图中最大的矩形.md‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,61 @@ function largestRectangleArea(heights: number[]): number {
670670
```
671671

672672

673+
Rust
674+
675+
双指针预处理
676+
```rust
677+
678+
impl Solution {
679+
pub fn largest_rectangle_area(v: Vec<i32>) -> i32 {
680+
let n = v.len();
681+
let mut left_smaller_idx = vec![-1; n];
682+
let mut right_smaller_idx = vec![n as i32; n];
683+
for i in 1..n {
684+
let mut mid = i as i32 - 1;
685+
while mid >= 0 && v[mid as usize] >= v[i] {
686+
mid = left_smaller_idx[mid as usize];
687+
}
688+
left_smaller_idx[i] = mid;
689+
}
690+
for i in (0..n-1).rev() {
691+
let mut mid = i + 1;
692+
while mid < n && v[mid] >= v[i] {
693+
mid = right_smaller_idx[mid] as usize;
694+
}
695+
right_smaller_idx[i] = mid as i32;
696+
}
697+
let mut res = 0;
698+
for (idx, &e) in v.iter().enumerate() {
699+
res = res.max((right_smaller_idx[idx] - left_smaller_idx[idx] - 1) * e);
700+
}
701+
dbg!(res)
702+
}
703+
}
704+
```
705+
706+
单调栈
707+
```rust
708+
impl Solution {
709+
pub fn largest_rectangle_area1(mut v: Vec<i32>) -> i32 {
710+
v.insert(0, 0); // 便于使第一个元素能够有左侧<=它的值
711+
v.push(0); // 便于在结束处理最后一个元素后清空残留在栈中的值
712+
let mut res = 0;
713+
let mut stack = vec![]; // 递增的栈
714+
for (idx, &e) in v.iter().enumerate() {
715+
while !stack.is_empty() && v[*stack.last().unwrap()] > e {
716+
let pos = stack.pop().unwrap();
717+
let prev_pos = *stack.last().unwrap();
718+
let s = (idx - prev_pos - 1) as i32 * v[pos];
719+
res = res.max(s);
720+
}
721+
stack.push(idx);
722+
}
723+
res
724+
}
725+
}
726+
```
727+
673728

674729
<p align="center">
675730
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

‎problems/0503.下一个更大元素II.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,24 @@ function nextGreaterElements(nums: number[]): number[] {
266266
};
267267
```
268268

269+
Rust
270+
```rust
271+
impl Solution {
272+
pub fn next_greater_elements(nums: Vec<i32>) -> Vec<i32> {
273+
let mut ans = vec![-1; nums.len() * 2];
274+
let mut stack = vec![];
275+
let double = nums.repeat(2);
276+
for (idx, &i) in double.iter().enumerate() {
277+
while !stack.is_empty() && double[*stack.last().unwrap()] < i {
278+
let pos = stack.pop().unwrap();
279+
ans[pos] = i;
280+
}
281+
stack.push(idx);
282+
}
283+
ans.into_iter().take(nums.len()).collect()
284+
}
285+
}
286+
```
269287

270288

271289
<p align="center">

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /