无相邻种花规则:种花可行性判定及异常案例咨询
花坛种花问题答疑
问题概述
给定由0(空地块)和1(已种植地块)组成的数组flowerbed,以及整数n,需判断是否能在相邻地块不可种花的规则下,种下n株新花。满足条件返回true,否则返回false。
示例说明
- 示例1:输入
flowerbed = [1,0,0,0,1], n = 1→ 输出true(可在中间的0位置种1株) - 示例2:输入
flowerbed = [1,0,0,0,1], n = 2→ 输出false(最多仅能种1株)
针对[0,0,1,0,0], n=1的疑问解答
这个输入的预期输出确实是true,如果你的代码返回false,问题出在没有正确处理数组首尾的边界逻辑:
该花坛的结构是[空, 空, 已种, 空, 空],符合种植条件的位置有两个:
- 第0位:左侧无地块,右侧是第1位(空),满足相邻无花,可种;
- 第4位:右侧无地块,左侧是第3位(空),满足相邻无花,可种。
所以完全可以种下1株,预期结果正确。你的代码出错,大概率是错误地要求首尾地块的“不存在的邻位”必须为0(或者误判为1),而实际上首尾地块只需要检查存在的那一侧邻位是否为空即可。
正确逻辑示例(伪代码)
count = 0 length = len(flowerbed) for i in 0 to length-1: if flowerbed[i] == 0: # 检查左侧是否为空:要么是数组开头,要么左邻是0 left_ok = (i == 0) or (flowerbed[i-1] == 0) # 检查右侧是否为空:要么是数组结尾,要么右邻是0 right_ok = (i == length-1) or (flowerbed[i+1] == 0) if left_ok and right_ok: flowerbed[i] = 1 # 标记为已种,避免重复计算 count += 1 if count >= n: return true return count >= n
用这个逻辑处理[0,0,1,0,0], n=1时,会在第0位成功种花,计数达到1后直接返回true,符合预期。
内容的提问来源于stack exchange,提问作者Rohit_Yadav_
相关产品推荐
相关产品推荐

