以下是我的面试问题。
输入:一串字符(ASCII),可以是一个句子。可以重复。 输出:按ASCII值的顺序排序
预期的复杂性:线性时间和恒定的额外空间
我的想法是做一种类型的桶排序,你有一个256号数组,然后使用它,但如果你有重复,那么如何处理?这会被视为恒定的空间吗?我想这是因为你只使用256个大小的数组,并且它不会随着输入的大小而增长。
不想要我自己想要的特定代码,但任何提示都会有所帮助!
答案 0 :(得分:1)
此问题的解决方案是counting sort。
您将拥有一个128大小的数组,并且所有值都初始化为0.使用字符的ascii值索引到数组中,然后递增数组值。
仅通过遍历128的数组生成排序序列,其中只有在array [i]为非零时才打印ascii值i的字符,并且该值给出要打印的字符的频率。
你是对的这是恒定大小O(1)和线性时间O(N)算法。