【发布时间】:2018-09-19 10:48:26
【问题描述】:
我最近在一次现场采访中被问到这个问题。我仍然无法提出解决方案。
问题: 有一个有 N 个插槽的花园。在每个插槽中,都有一朵花。 N 天,N 朵花会一一绽放。每一天,都会有一朵花开,从那时起它就处于盛开的状态。
给定一个名为 flowers 的数组,由 1 到 N 的数字组成。数组中的每个数字代表当天花开的地方。
例如,flowers[i] = x 表示在第 i 天开花的唯一花将在位置 x,其中i 和 x 将在 1 到 N 的范围内。
给定 K,找到最后天至少有一组大小为 K 的花朵开花。如果没有找到这样的天,则返回 -1
示例:
数组:[3,1,5,4,2]; k = 1
第1天:0 0 1 0 0
第2天:1 0 1 0 0
第3天:1 0 1 0 1
day4 :1 0 1 1 1 >>> 最后一天可以看到一组大小为 k=1 的组
第5天:1 1 1 1 1
答案是第 4 天(花:1)。
如果 k = 2 或 4
答案是-1。
如果 k = 3
答案是第 4 天(花:3,4,5)。
如果 k = 5
答案是第 5 天(花:1,2,3,4,5)。
编辑 1:
我能够在 O(n^2) 中解决它。但面试官预计复杂度为 O(nlogn)
对于那些使用 leetcode 的人,这是以下问题的变体:https://leetcode.com/problems/k-empty-slots/description/(只能通过 leetcode 付费订阅访问)
谢谢!!
【问题讨论】:
-
“找出最后一天有至少一组 K 大小的花朵”与:“每天,只有一朵花盛开”相矛盾
-
SO 不是代码编写服务。如果您尝试自己解决问题并卡在尝试的特定部分,请随时再次在这里提问。但是“我想要这个东西,有人给我写”不适合这个论坛。
-
您是否在寻找算法(即您想对其进行编码)?还是工作代码?
-
@alfasin 花一开,花就会像第 3 行那样从那一刻开始处于盛开状态“每天,只有一朵花在盛开,它会处于盛开状态自那以后。”希望这能清除。
-
@mypetlion 很抱歉没有明确说明我的意图。为了清楚起见,我不想要代码。我能够在 O(n*n) 中解决(在每朵花开花后应用滑动窗口)。但是面试官想要一个时间复杂度为 O(nlogn) 的算法。所以我想知道是否有更好的方法在 nlogn 中使用一些数据结构来解决这个问题。
标签: java arrays treeset sliding-window