给定一个链表,使每个节点都是一个数字的数字。
例如:如果number为1234,则相应的链接列表为:
1 -> 2 -> 3 -> 4 -> [\]
问题是在这个数字上加1。所以输出将是:
1 -> 2 -> 3 -> 5 -> [\]
我们可以在O(n)时间内以O(n)空间递归地进行。是否可以将解决方案优化为O(logn)时间复杂度?
更新 n是总位数。
答案 0 :(得分:2)
不,如果您没有其他数据结构。
由于列表中的最后一个节点将始终更改,并且任何算法到达那里需要O(n)时间(如果没有其他数据结构,则必须追逐整个列表),这将给出O(n)作为你的下限。
答案 1 :(得分:0)
什么是n
?如果n
是数字中的位数,我认为不可能有O(log(n))
解决方案。
如果n是数字本身,那么位数已经是O(log(n))
。
答案 2 :(得分:0)
您必须遍历每个数字才能执行操作,没有其他方法,但是因为您知道元素的总数,因此您可以编写所有移动操作,如head-> next-> next- > next ...在同一行而不是for循环中。这将加快该过程,因为将避免运行for循环的过载时间复杂性。