-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_0000605_can_place_flowers.rs
81 lines (75 loc) · 2.18 KB
/
_0000605_can_place_flowers.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// 0000605. Can Place Flowers
// https://leetcode.com/problems/can-place-flowers/description/
// You have a long flowerbed in which some of the plots are planted, and some are not.
//
// However, flowers cannot be planted in adjacent plots.
//
// Given an integer array flowerbed containing 0's and 1's, where 0 means empty and 1 means not empty, and an integer n, return true if n new flowers can be planted in the flowerbed without violating the no-adjacent-flowers rule and false otherwise.
//
// Example 1:
//
// Input: flowerbed = [1,0,0,0,1], n = 1
// Output: true
//
// Example 2:
//
// Input: flowerbed = [1,0,0,0,1], n = 2
// Output: false
//
// Constraints:
//
// 1 <= flowerbed.length <= 2 * 104
// flowerbed[i] is 0 or 1.
// There are no two adjacent flowers in flowerbed.
// 0 <= n <= flowerbed.length
//
// ---
pub fn can_place_flowers(flowerbed: Vec<i32>, n: i32) -> bool {
let mut flowerbed_mut = flowerbed.clone();
let flowerbed_len = flowerbed_mut.len();
let mut slots_available = 0;
for i in 0..flowerbed_len {
let left = i == 0 || flowerbed_mut[i - 1] == 0;
let right = i == flowerbed_len - 1 || flowerbed_mut[i + 1] == 0;
if flowerbed_mut[i] == 0 && left && right {
flowerbed_mut[i] = 1;
slots_available += 1;
}
}
slots_available >= n
}
// ---
pub fn testcase() {
let flowerbed = vec![1, 0, 0, 0, 1];
let n = 1;
let res = can_place_flowers(flowerbed, n);
eprintln!("{} {:?}", module_path!(), res);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_1() {
let flowerbed = vec![1, 0, 0, 0, 1];
let n = 1;
let res = can_place_flowers(flowerbed, n);
let expected = true;
assert_eq!(res, expected);
}
#[test]
fn test_2() {
let flowerbed = vec![1, 0, 0, 0, 1];
let n = 2;
let res = can_place_flowers(flowerbed, n);
let expected = false;
assert_eq!(res, expected);
}
#[test]
fn test_3() {
let flowerbed = vec![1, 0, 0, 0, 0, 1];
let n = 2;
let res = can_place_flowers(flowerbed, n);
let expected = false;
assert_eq!(res, expected);
}
}