【问题标题】:Consecutive group with size K in an array数组中大小为 K 的连续组
【发布时间】:2018-09-19 10:48:26
【问题描述】:

我最近在一次现场采访中被问到这个问题。我仍然无法提出解决方案。

问题: 有一个有 N 个插槽的花园。在每个插槽中,都有一朵花。 N 天,N 朵花会一一绽放。每一天,都会有一朵花开,从那时起它就处于盛开的状态。

给定一个名为 flowers 的数组,由 1 到 N 的数字组成。数组中的每个数字代表当天花开的地方。

例如,flowers[i] = x 表示在第 i 天开花的唯一花将在位置 x,其中ix 将在 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


【解决方案1】:

这个问题可以在 O(nlogn) 内通过实现 Union-Find(使用 Union by Rank 和路径压缩)来解决。

最初(在第 0 天),每个花槽代表一个不同的集合 大小=0。此时会有N个这样的集合。
变量k-sets 表示有多少个集合的大小正好是k。这被初始化为零。变量answer 表示最后一次迭代(天),它至少有一组大小k;并初始化为-1;

处理数组(N次迭代):当一朵花开花时,槽index会发生以下事件:

  1. 位置index 的集合大小现在为1。如果k==1k-sets 增加1
  2. 右联合(设置在index+1):如果你不在位置N(即你不能在边界位置N右联合)然后调用UNION(index, index+1)。只有在index+1 的集合大小大于零时才会发生联合。
  3. Union Left(设置在index-1):如果您不在位置0,则调用UNION(index, index-1)。同样,仅当左集不为空时才会发生联合。
  4. 如果 k-sets > 0,则 answer = day(即其中 day 是数组的 n-th 迭代)

当联合发生时(称它们为AB),必须完成与k-sets 相关的三个更新:

  1. 如果A的大小是k,那么k-sets--
  2. 如果B的大小是k,那么k-sets--
  3. 如果A、B的并集大小为k,则k-sets++

在迭代结束时,print answer

运行时间:有N天,每天的成本与O(logn)成线性关系,所以运行时间为O(NlogN)

Proof of O(logn) time of Union-Find

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 2016-12-29
    • 2019-03-22
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多