【问题标题】:Sort an array of characters对字符数组进行排序
【发布时间】:2016-04-16 18:45:40
【问题描述】:

这是我遇到的一个面试问题。

输入:一串字符(ASCII),可以是一个句子。可以重复。 输出:按 ASCII 值排序

预期复杂度:线性时间和恒定附加空间

我的想法是做一种桶排序,你有一个大小为 256 的数组,然后使用它,但如果你有重复,那么如何处理呢?这会被认为是恒定空间吗?我猜是因为你只使用了 256 大小的数组,而且它不会随着输入的大小而增长。

不想要特定代码,因为我想自己这样做,但任何提示都会有所帮助!

【问题讨论】:

  • 想想数组的值应该是多少。 (而且你只需要 ASCII 的大小为 128 ......)
  • 哦,好的,我明白了。索引位置是字符,值是计数。谢谢!
  • 这将是计数排序。 128 大小数组的线性时间。

标签: arrays string algorithm sorting


【解决方案1】:

这个问题的解决方法是counting sort

您将拥有一个大小为 128 的数组,并且所有值都初始化为 0。使用字符的 ascii 值对数组进行索引,然后递增数组值。

排序后的序列将通过遍历大小为 128 的数组来生成,如果 array[i] 非零并且该值给出了要打印的字符的频率,则仅打印 ascii 值 i 的字符。

你是对的,这是恒定大小 O(1) 和线性时间 O(N) 算法。

【讨论】:

  • 请注意,对于 ASCII,数组大小只需为 128,而不是 256。ASCII 是 7 位编码。
  • @JonSkeet 我们确实有扩展大小的 ascii 字符集。对。但这不是重点。无论如何。
  • “扩展 ASCII”不是一种特定的编码,根据我的经验,它通常是一个无用的术语。最好编辑你的答案以避免给人留下 ASCII 有 256 个字符的印象——网络上已经有太多地方在传播这种谬论了。
猜你喜欢
  • 2016-07-18
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多