列表元素循环前移问题:O(n)复杂度实现及错误修复
解决方案:利用列表切片实现O(n)时间复杂度的元素前移
错误原因分析
你碰到的TypeError: can only concatenate list (not "int") to list,本质是代码里把单个整数元素和列表做了拼接操作。比如如果写了lst[-d] + lst[:-d],lst[-d]取到的是单个元素(比如示例里的4),而不是包含该元素的子列表,自然无法和lst[:-d]这个列表拼接。
正确实现方式
直接利用Python的列表切片特性,就能在O(n)时间复杂度内完成需求,且不需要嵌套循环:
def rotate(lst, d): n = len(lst) d = d % n # 处理d大于列表长度的冗余情况 return lst[-d:] + lst[:-d]
验证示例
对于输入lst=[1,2,3,4,5],d=2:
lst[-2:]取列表最后2个元素,结果是[4,5]lst[:-2]取列表除最后2个元素外的部分,结果是[1,2,3]- 两者拼接后得到
[4,5,1,2,3],完全符合预期。
时间复杂度说明
列表切片操作的时间复杂度是O(k)(k为切片包含的元素数量),拼接两个切片的总操作是遍历所有n个元素一次,因此整体时间复杂度为O(n),满足你的要求,且没有嵌套循环。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

