【问题标题】:How can I find an element in an m-sorted array, where the rest of the array is zeros and m is not given如何在 m 排序数组中找到一个元素,其中数组的其余部分为零且未给出 m
【发布时间】:2020-05-01 07:48:49
【问题描述】:

给定一个包含 n 个元素的数组。数组中的前 m 个元素已排序(没有重复)并且不同于零。 数组的其余部分为零。

需要注意的是,m 是未知的——它可以是任何东西,但已知 n >> m

现在,给定 x;如果它存在于数组中,我应该返回它的索引,否则,它不存在。 现在的问题是我必须找到一种算法来做到这一点

一个简单的答案是扫描数组,只要下一个元素不为零,时间复杂度为 O(m),或者只是“二进制搜索”的修改版本,时间复杂度为 O(logn)。 除了这两个解决方案 - 我不知道。 暗示我们可以在 O(logm) 时间复杂度中找到 x,通过在 O(logm) 时间内找到 m 然后我可以对前 m 个元素进行二分搜索......但除此之外我不知道!

【问题讨论】:

  • 您的想法是正确的。在第一个 m 元素中进行二分搜索是可行的方法。
  • 'm' 未知 @m.raynal,这就是问题所在。

标签: arrays algorithm sorting search data-structures


【解决方案1】:

您可以在O(log m) 时间找到m,如下所示(考虑到第一个m 元素确实包含0)。

i = 1
while A[i] != 0 do
  i = 2*i
return i

这为您提供了m 的上限,最多为2m(意思是m <= i <= 2m)。然后,您所要做的就是对数组的第一个元素 i 进行二分搜索以找到 x

每个操作都可以在O(log m)时间完成,所以总复杂度是O(log m)

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多