【问题标题】:Output array numbers with their negation in O(n) time and O(1) space输出在 O(n) 时间和 O(1) 空间中取反的数组数字
【发布时间】:2020-01-28 12:57:25
【问题描述】:

给定一个整数数组。如果数字 a 及其否定 -a 都存在于数组中,则打印它。例如:如果给出 {10, 5, 0, 9, -10, 7, -5},则打印 10, 5。 我给了面试官 O(N) 时间和 O(N) 基于 HashMap 的空间复杂度代码,但他进一步要求我在最坏的情况下将空间复杂度降低到 O(1),保持时间复杂度 O(N)。 注意:不允许计数排序。 请问,谁能给我提供 O(1) 空间复杂度的方法?

【问题讨论】:

  • 添加标签以指定您希望使用哪种语言回答。同时添加您拥有的解决方案。
  • 觉得不可能
  • 如果数字很小,您可以使用位掩码来跟踪项目。
  • 负值总是最后出现吗?
  • 使用正数的二进制 trie 是一种解决方案吗?

标签: java arrays algorithm time-complexity space-complexity


【解决方案1】:

如果数组元素无序且在任意范围内,这在O(n) 时间和O(1) 空间中是不可能的。如果数组已排序,我们可以使用两个指针在这些约束内解决它。

【讨论】:

  • 我给了面试官同样的答案,但他不相信。
  • @HarshulAgarwal 很棒。让我们听听他的解决方案,以及关于排序和范围的明确输入参数。
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 2015-06-25
  • 2015-05-25
  • 2012-08-06
  • 1970-01-01
  • 2011-08-24
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多