题目:给定一个长度不小于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(L):
if L == None or len(L) < 2:
return
even = 0
odd = 1
length = len(L)-1
while enen <= length and odd <= length:
if L[length] & 1 == 0:
swap(L,length-1,odd)
odd +=2
else:
swap(L,length-1,even)
even +=2
def swap(L,i,j):
tmp = L[i]
L[i] = L[j]
L[j] = tmp