数组相关问题
反转数组
该问题是“给定一个数组,将其元素按从右到左重新排列,比如输入\([1,2,3]\),应该得到\([3,2,1]\)。要求在原数组上反转,且只能占用常数额外空间”。这个问题可通过以中心为对称轴,从最外层开始反转,比如\([1,2,3,4,5]\),会先变成\([5,2,3,4,1]\),然后变成\([5,4,3,2,1]\),两轮即可完成。然后考虑问题的边界,当数组有奇数个元素,两索引最后会在中心元素处相遇,当数组有偶数个元素,两索引最后会出现右边小于左边的情况。所以当右边的索引小于等于左边的索引时就意味着算法结束。该算法的时间复杂度是\(O(n)\),其中\(n\)为数组中元素的个数。具体程序实现如下。
Python
def reverse(arr):
i, j = 0, len(arr) - 1
while… 阅读全文