arrays - 计算不同的数组条目 [不添加内存也不更改数组]

标签 arrays algorithm

任务是计算给定数组的唯一数字。我在 SO 上看到了很多类似的问题,但是这里我们有额外的要求,这些要求在其他问题中没有说明:

  • > 允许的额外内存量为 O(1)
  • 数组的变化是 禁止

我能够编写符合给定约束条件的二次算法。但我一直在想,在这样的问题上是否可以做得更好?感谢您的宝贵时间。
O(n^2) 的算法

def count(a):
    unique = len(a)
    ind = 0
    while ind < len(a):
        x = a[ind]
        i = ind+1
        while i < len(a):
            if a[i] == x:
                unique -= 1
                break
            i += 1
        ind += 1

    print("Total uniques: ", unique)

最佳答案

这与 Cracking the Coding Interview 第 1 章(数组和字符串)中的后续问题非常相似:

Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structures?

答案(对后续问题)是,如果您不能对数组进行任何假设(即,它没有排序,您不知道它的大小等),那么就没有算法比你展示的要好。

话虽如此,您可能会考虑稍微放宽限制,让它变得更有趣。例如,如果数组大小有上限,则可以使用位向量来跟踪在遍历数组时读取的值,尽管严格来说这不是 O(1) 关于内存使用的解决方案(有人可能会争辩说,通过知道最大数组大小,内存使用是恒定的,因此 O(1),但这有点作弊).同样,如果数组已排序,您也可以在 O(n) 中解决它,方法是一次遍历每个元素并检查其相邻元素是否为不同的数字。

关于arrays - 计算不同的数组条目 [不添加内存也不更改数组],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23712992/

相关文章:

javascript - MongoDB/ meteor : Add unique ID to every array element

java - 检查数组中所有元素是否相等的最快方法

ios - 如何对 JSON 数组进行排序并将其呈现在 UITableView 中

python - NumPy:使用自定义数据类型时的数组分配问题

algorithm - 合并两个数组的最大可能方式

约束度+有界直径最小生成树的算法?

php - 如何在 PHP 中访问 stdClass 对象的元素

algorithm - 如何模糊匹配长位模式中的短位模式?

java - 如何将大整数转换为二进制?

algorithm - 查找路径是一个大部分为空的加权网格