2018年5月22日 星期二

[LeetCode] 605. Can Place Flowers

轉自LeetCode

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.
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.
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
Note:
  1. The input array won't violate no-adjacent-flowers rule.
  2. The input array size is in the range of [1, 20000].
  3. n is a non-negative integer which won't exceed the input array size.
<Solution>

想法如下
  • 歷遍 array,並根據條件檢查可種花的位置有幾個
  • 如果已經滿足條件了,就可以直接回傳答案,不用再做檢查
code 如下

Java
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
final int upperBound = flowerbed.length - 1;
int cnt = 0;
for(int i = 0; i < flowerbed.length; i++) {
if(flowerbed[i] == 0 && (i == 0 || flowerbed[i-1] == 0) && (i == upperBound || flowerbed[i+1] == 0)) {
++cnt;
flowerbed[i] = 1;
}
if(cnt >= n) {
return true;
}
}
return false;
}
}

kotlin
class Solution {
fun canPlaceFlowers(flowerbed: IntArray, n: Int): Boolean {
return if(n == 0) {
true
} else {
var next = 0
var prv = 0
var count = 0
for(i in flowerbed.indices) {
if(flowerbed[i] == 0) {
next = if(i == flowerbed.lastIndex) {
0
} else {
flowerbed[i+1]
}
prv = if(i == 0) {
0
} else {
flowerbed[i-1]
}
if(next + prv == 0) {
flowerbed[i] = 1
++count
}
}
}
count >= n
}
}
}

沒有留言:

張貼留言