diff --git a/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README.md b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README.md index 1bebd67a6ae79..39e69e6253f9b 100644 --- a/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README.md +++ b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README.md @@ -162,6 +162,42 @@ public: }; ``` +### **Rust** + +```rust +impl Solution { + #[allow(dead_code)] + pub fn min_taps(n: i32, ranges: Vec) -> i32 { + let mut last = vec![0; (n + 1) as usize]; + let mut ans = 0; + let mut mx = 0; + let mut pre = 0; + + // Initialize the last vector + for (i, &r) in ranges.iter().enumerate() { + if i as i32 - r >= 0 { + last[(i as i32 - r) as usize] = std::cmp::max(last[(i as i32 - r) as usize], i as i32 + r); + } else { + last[0] = std::cmp::max(last[0], i as i32 + r); + } + } + + for i in 0..n as usize { + mx = std::cmp::max(mx, last[i]); + if mx <= i as i32 { + return -1; + } + if pre == i as i32 { + ans += 1; + pre = mx; + } + } + + ans + } +} +``` + ### **Go** ```go diff --git a/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README_EN.md b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README_EN.md index 9e55ef6bce344..cf566f0063d85 100644 --- a/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README_EN.md +++ b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/README_EN.md @@ -122,6 +122,42 @@ public: }; ``` +### **Rust** + +```rust +impl Solution { + #[allow(dead_code)] + pub fn min_taps(n: i32, ranges: Vec) -> i32 { + let mut last = vec![0; (n + 1) as usize]; + let mut ans = 0; + let mut mx = 0; + let mut pre = 0; + + // Initialize the last vector + for (i, &r) in ranges.iter().enumerate() { + if i as i32 - r >= 0 { + last[(i as i32 - r) as usize] = std::cmp::max(last[(i as i32 - r) as usize], i as i32 + r); + } else { + last[0] = std::cmp::max(last[0], i as i32 + r); + } + } + + for i in 0..n as usize { + mx = std::cmp::max(mx, last[i]); + if mx <= i as i32 { + return -1; + } + if pre == i as i32 { + ans += 1; + pre = mx; + } + } + + ans + } +} +``` + ### **Go** ```go diff --git a/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/Solution.rs b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/Solution.rs new file mode 100644 index 0000000000000..2e221f2bd9ccd --- /dev/null +++ b/solution/1300-1399/1326.Minimum Number of Taps to Open to Water a Garden/Solution.rs @@ -0,0 +1,31 @@ +impl Solution { + #[allow(dead_code)] + pub fn min_taps(n: i32, ranges: Vec) -> i32 { + let mut last = vec![0; (n + 1) as usize]; + let mut ans = 0; + let mut mx = 0; + let mut pre = 0; + + // Initialize the last vector + for (i, &r) in ranges.iter().enumerate() { + if i as i32 - r >= 0 { + last[(i as i32 - r) as usize] = std::cmp::max(last[(i as i32 - r) as usize], i as i32 + r); + } else { + last[0] = std::cmp::max(last[0], i as i32 + r); + } + } + + for i in 0..n as usize { + mx = std::cmp::max(mx, last[i]); + if mx <= i as i32 { + return -1; + } + if pre == i as i32 { + ans += 1; + pre = mx; + } + } + + ans + } +} \ No newline at end of file