gpt4 book ai didi

c++ - 如何用 O(n) 时间和 O(1) 空间对包含 n 个对象的组进行排序。每个对象有两个字段 : int and string.

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:18 24 4
gpt4 key购买 nike

如何对具有 n 个对象的组进行排序。每个对象都有两个字段:int 和 string。

对象应根据 int 字段进行排序。但是,我们只知道 int 字段的范围而不是它的值。

它应该在 O(n) 时间和 O(1) 空间内完成。

我建议使用桶排序,但我不知道如何使用 O(1) 空间进行排序。

可以使用快速排序,但它是 O(n lg n)。

有什么想法吗?谢谢

最佳答案

一旦整数范围固定,范围内每个值的一个桶数组需要空间 O(1)。 Remember, any fixed, problem-instance-independent amount of space is O(1).

完整的解决方案假定对输出进行随机访问。

  1. 我们首先计算每个输入整数的频率(O(n) 时间,O(1) 空间)
  2. 根据频率,我们可以计算 O(1) 空间和时间中每个输入整数的第一个输出索引
  3. 我们对输入进行第二次传递,并将每个输入项存储在正确排序的输出位置。存储一项后,我们增加该项的整数值的输出索引。 (O(n) 时间,O(1) 空间)

总的复杂度是 O(n) 时间,O(1) 空间,正如所宣传的那样。

当我们没有随机访问输出时,我没有看到满足要求的解决方案。

关于c++ - 如何用 O(n) 时间和 O(1) 空间对包含 n 个对象的组进行排序。每个对象有两个字段 : int and string.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com