最近在一次采访中有人问我这个问题,我仍然无法提出解决方案。
有一个带有N个插槽的花园。在每个插槽中,都有一朵花。 N朵花将在N天内一朵盛开。每天都会有一朵鲜花盛开,此后便一直处于盛开状态。
给出一个数组,其中包含从1到N的数字。数组中的每个数字代表该天该朵花将要开放的地方。
例如,flowers [i] = x表示第i天开花的唯一花朵将位于x位置,其中i和x的范围为1到N。
还要给定整数K和M,您需要输出最近一天中处于开花状态的M个长度至少为K的开花组。
答案 0 :(得分:1)
一种可能的方法
转换数组 flowers [i] = x到flowers2 [x] = i
现在可以从day = 1..N
开始迭代 如果flowers2 [i] <= day,则位于位置i的花朵将开花。现在,您要做的就是计算size> = K-O(n2)解的连续组数。这可以优化为O(nlong),方法是意识到随着一天从1个增长到N个,.groups的大小将越来越大,数目越来越小。因此,执行类似二进制搜索的操作。从天= N / 2开始。假设最小组大小为k,组数为m。现在,如果kM选择天作为上限(N / 2,N)的中点,则将下限(0,N / 2)的中点作为天。反复进行直到找到ans。只有在答案始终存在的情况下,这才起作用