这是一个面试问题我。
A string of ascii characters, in sorted order of their ascii values. You can overwrite the existing array
Aim for linear time and constant additional space
Use the fact that ascii has only 256 unique characters
我可以通过将单元格的计数增加到单元格[i] +256来完成线性时间复杂度,然后执行a(cell [i] / 256)+1来获取计数。然后,也许,打印出字符串。但那仍然是O(n)
空间,因为我无法将输出保存在与输入相同的数组中。
此外,给出的方法原型是,
public String sortCharacters(String str)
{
}
由于字符串在Java中是不可变的,这个问题不可能解决吗?
答案 0 :(得分:0)
使用只有256个字符的事实。为256个字符创建哈希映射。由于数字256是已知的,因此它仍被视为恒定空间。只需执行线性时间遍历,您就会得到排序列表。
答案 1 :(得分:0)
"恒定的额外空间"意味着您使用相同数量的额外空间,无论输入字符串的大小如何。
以下是您的工作方式:
在伪代码中,它看起来像这样:
counts = array[256] of int, initialized to 0
// count character occurrences
for each char in string
index = (int)char
counts[index] = counts[index + 1]
// build string
outputString = ""
for index = 0 to 255
if (counts[index] > 0)
c = (char)index
outputString = outputString + repeat(c, counts[index])
return outputString;