我的个人网站
点击可查看所有文章
老老实实写 考虑情况头中尾
种花 相邻都为0才能种 输入:flowerbed = [1,0,0,0,1], n = 1 输出:true 输入:flowerbed = [1,0,0,0,1], n = 2 输出:false 1 <= flowerbed.length <= 2 * 104 flowerbed[i] 为 0 或 1 flowerbed 中不存在相邻的两朵花 0 <= n <= flowerbed.length 别人的解法 【1】当遍历到index遇到1时,说明这个位置有花,那必然从index+2的位置才有可能种花,因此当碰到1时直接跳过下一格。 【2】当遍历到index遇到0时,由于每次碰到1都是跳两格,因此前一格必定是0,此时只需要判断下一格是不是1即可得出index这一格能不能种花,如果能种则令n减一,然后这个位置就按照遇到1时处理,即跳两格;如果index的后一格是1,说明这个位置不能种花且之后两格也不可能种花(参照【1】),直接跳过3格。 public boolean canPlaceFlowers(int[] flowerbed, int n) { for (int i = 0, len = flowerbed.length; i < len && n > 0;) { if (flowerbed[i] == 1) { i += 2; } else if (i == flowerbed.length - 1 || flowerbed[i + 1] == 0) { n--; i += 2; } else { i += 3; } } return n <= 0; }
public boolean canPlaceFlowers(int[] flowerbed, int n) { int length = flowerbed.length; if (1 == length && flowerbed[0] == 0) { if (n == 1||n==0) { return true; } else { return false; } } for (int i = 0; i < length; i++) { if (0 == i) { if (0 == flowerbed[0] && 0 == flowerbed[1]) { n--; flowerbed[0] = 1; } } else if (length - 1 == i) { if (0 == flowerbed[length - 2] && 0 == flowerbed[length - 1]) { n--; } } else if (0 == flowerbed[i - 1] && 0 == flowerbed[i + 1]) { if (0 == flowerbed[i]) { n--; flowerbed[i] = 1; } } } return n <= 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)