【发布时间】: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