【题目】
给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数。要求时间复杂度O(N),空间复杂度O(1)。
【基本思路】
使用两个指针even、odd。odd一直指向奇数位置,even一直指向偶数位置。初始是 even = 0、odd = 1。不断的检查数组最后一个数,如果该数是奇数就和odd位置的数交换,同时,odd += 2;如果是偶数就和even位置的数交换,同时,even += 2。如果even和odd有一个发生越界,调整结束。
【代码实现】
def modify(arr):
if arr == None or len(arr) < 2:
return
even = 0
odd = 1
while even < len(arr) and odd < len(arr):
if arr[-1] & 1 == 0:
arr[even], arr[-1] = arr[-1], arr[even]
even += 2
else:
arr[odd], arr[-1] = arr[-1], arr[odd]
odd += 2
return arr