给定一个自然数数组,每个数可以是不同位数,但保证所有数加在一起的总位数是m
。
例如,如果一个三个数字:
2,3,1081 then m = 6.
Run Code Online (Sandbox Code Playgroud)
我需要对数组中的数字进行排序的算法O(m)
。
我尝试过基数排序,但对我没有好处。
基数排序绝对可以解决这个问题O(m)
。从最低有效位开始进行基数排序,并迭代地向最高有效位移动。
每当您遇到“不存在的数字”(例如,数字“5”的第二次迭代)时,将其视为 -1 - 因此它将是此迭代生成的数组中的第一个。
在每一轮“回合”之后,减少数组大小并“修剪”您刚刚传递的所有数字(在本次迭代中您只是将其视为“-1”)。
这需要精确检查每个元素中的每个数字一次,此外 - 对于每个元素,当您将其视为 -1 时检查一次。
这给了你O(m+n)
复杂性,因为n<m
- 这是O(m)