Codility CyclicRotation in Python
算法复杂度分析
情况 | 时间复杂度 | 空间复杂度 |
---|---|---|
最优 | O(1) | O(N) |
平均 | O(N) | O(N) |
最差 | O(N) | O(N) |
算法分析
并不是要真的右移K次数组,K对N取模,可求出实际要右移的次数K = K%N。利用python数组切片操作,以N-k为切点,将数组分成前后两部分,颠倒前后顺序拼接后便可得到右移K次的数组。
Pyhton数据切片
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 给切片起始、终止值和步长,
a[0:5:2] # [0, 2, 4]
- 给切片起始和终止值,步长值缺省时其默认值为1
a[0:5] # [0, 1, 2, 3, 4]
a[0:] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[:5] # [0, 1, 2, 3, 4]
a[:] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 给负值
a[-1] # 9
a[-2:] # [8, 9]
a[:-2] # [0, 1, 2, 3, 4, 5, 6, 7]
源代码
1 | def solution(A, K): |
参考
- Python数组切片算法复杂度分析
- Python数组切片操作解释