设定 odd even两个标志位为odd为1,even为0,然后从最后一位开始看,如果说最后一位为偶数,就和even位交换,even自增2,如果是奇数,则和odd位交换,odd自增2,一直到二者其中一个越界位置。 解法比较奇特。
#include<iostream>
#include <hash_map>
#include <algorithm>
using namespace std;
//改变数组,令其奇数位置存储奇数,偶数位置存储偶数
//要求空间复杂度为O(1),时间复杂度为O(n)
int a[]={9,6,5,4,3,2,1,8};
void ChangeArray(int len)
{
int end=a[len-1];
int even=0;
int odd=1;
while(even<len&&odd<len)
{
if(a[len-1]%2==0)
{
std::swap(a[len-1],even);
even+=2;
}
else
{
std::swap(a[len-1],odd);
odd+=2;
}
}
}
int main()
{
ChangeArray(8);
return 0;
}