此问题是来自leetcode的k empty slot的变体。 新的问题是,要求找到有k个连续盛开的鲜花的最后一天。
e.g。 总共7天,1代表花开,0代表花不开花,k = 3
day1:1 0 0 0 0 0 0
day2:1 0 1 0 0 0 0
day3:1 1 1 0 0 0 0 1st time find k consecutive bloomed flowers
更新: lastDayBloomKflowers = 3
day4:1 1 1 0 1 0 0
day5:1 1 1 0 1 1 0
day6:1 1 1 0 1 1 1 2nd time find k consecutive boomed flowers
更新: lastDayBloomKflowers = 6
day7:1 1 1 1 1 1 1
最后,鲜花将在所有位置绽放
所以最终的解决方案是lastDayBloomKflowers = 6
我们如何获得lastDayBloomKflowers
?
时间复杂度为O(nlogn)
,空格为O(n)
我知道如何解决原始的leetcode问题,我想使用树集,但对于这个变种,我不知道我应该使用什么数据结构,并有效地解决它。
感谢您的时间!
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////
我正在寻求k空槽问题变体的帮助。
由于leetcode上的k空插槽问题的url是素数,而你们中的一些人可能无法打开,我会在这里向你展示原始k空插槽问题:
有一个带N个插槽的花园。在每个插槽中,都有一朵花。 N花将在N天内逐一绽放。在每一天,都会有一朵鲜花盛开,从此开始盛开。
给定一个数组花由1到N之间的数字组成。数组中的每个数字代表花在那一天打开的地方。
例如,flowers [i] = x表示在第i天开花的独特花将位于x位置,其中i和x将在1到N的范围内。
同样给出一个整数k,你需要输出哪一天在盛开的状态下有两朵花,而且它们之间的花数是k,这些花没有晕染。
答案 0 :(得分:0)
让我们将日线转换为表示每天更新位置的数组:
day1:1 0 0 0 0 0 0
array: [None,1] means on day 1, flower 1 bloomed
day2:1 0 1 0 0 0 0
array: [None,1,3] means on day 2, flower 3 bloomed
day3:1 1 1 0 0 0 0
array: [None,1,3,2] means on day 3 flower 2 bloomed
day4:1 1 1 0 1 0 0
array: [None,1,3,2,5]
day5:1 1 1 0 1 1 0
array: [None,1,3,2,5,6]
day6:1 1 1 0 1 1 1
array: [None,1,3,2,5,6,7]
day7:1 1 1 1 1 1 1
array: [None,1,3,2,5,6,7,4]
现在让我们用一个滑动窗口迭代这个数组:
[None,1,3,2,5,6,7,4]
k: 1 |-| min,max 1
k: 2 |---| min,max 1,3
k: 3 |-----| min,max 1,3 and count is 3 so days must be consecutive,
record (1,3) and day 3
k: 3 |-----| min,max 2,5 not consecutive
k: 3 |-----| min,max 2,6 not consecutive
k: 3 |-----| min,max 5,7 and count is 3 so days must be consecutive
also 6 is greater than 3 and (5,7) does not
overlap with (1,3) so the last day is now
known to be 6
k: 3 |-----| min,max 4,7 not consecutive