forked from rampatra/Algorithms-and-Data-Structures-in-Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCanPlaceFlowers.java
67 lines (63 loc) · 2.26 KB
/
CanPlaceFlowers.java
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
package com.leetcode.arrays;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* Level: Easy
* Problem Link: https://leetcode.com/problems/can-place-flowers/
* Problem Description:
* Suppose 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 - they would compete for water and both would die.
* <p>
* Given a flowerBed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a
* number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.
* <p>
* Example 1:
* Input: flowerBed = [1,0,0,0,1], n = 1
* Output: True
* <p>
* Example 2:
* Input: flowerBed = [1,0,0,0,1], n = 2
* Output: False
* <p>
* Note:
* The input array won't violate no-adjacent-flowers rule.
* The input array size is in the range of [1, 20000].
* n is a non-negative integer which won't exceed the input array size.
*
* @author rampatra
* @since 2019-07-24
*/
public class CanPlaceFlowers {
/**
* Time Complexity: O(n)
* Space Complexity: O(1)
* Runtime: <a href="https://leetcode.com/submissions/detail/246312039/">1 ms</a>.
*
* @param flowerBed
* @param n
* @return
*/
public static boolean canPlaceFlowers(int[] flowerBed, int n) {
int i = 0, count = 0;
while (i < flowerBed.length) {
if (flowerBed[i] == 0 && (i == 0 || flowerBed[i - 1] == 0) && (i == flowerBed.length - 1 || flowerBed[i + 1] == 0)) {
flowerBed[i++] = 1;
count++;
}
if (count >= n)
return true;
i++;
}
return false;
}
public static void main(String[] args) {
assertTrue(canPlaceFlowers(new int[]{0}, 0));
assertTrue(canPlaceFlowers(new int[]{0}, 1));
assertTrue(canPlaceFlowers(new int[]{1}, 0));
assertFalse(canPlaceFlowers(new int[]{1}, 1));
assertTrue(canPlaceFlowers(new int[]{1, 0, 0, 0, 1}, 1));
assertFalse(canPlaceFlowers(new int[]{1, 0, 0, 0, 1}, 2));
assertFalse(canPlaceFlowers(new int[]{1, 0, 0, 0, 0, 1}, 2));
assertTrue(canPlaceFlowers(new int[]{1, 0, 0, 0, 1, 0, 0}, 2));
}
}