题目描述
给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数
注意:1、数组下标从0开始!
2、本题有special judge,你可以输出任意一组合法解!同时可以证明解一定存在
[要求]
时间复杂度为O(n),额外空间复杂度为O(1)
输入描述:
第一行一个整数N。表示数组长度
接下来一行N个整数表示数组内的数
输出描述:
输出N个整数。表示调整后的数组
示例1
输入
5
1 2 3 4 5
输出
2 1 4 3 5
说明
样例中的输出保证了奇数下标都是奇数
解法一:类似双指针
import java.io.*;
public class Main{
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static int[] change(int[] a){
int odd = 1;
int even = 0;
int index = a.length-1;
while(odd<=index&&even<=index){
//奇数
if((a[index]&1)==1){
if(odd==index){
index--;
}else if(odd<index){
swap(a,odd,index);
}
odd += 2;
}else{
if(even==index){
index--;
}else if(even<index){
swap(a,even,index);
}
even += 2;
}
}
return a;
}
public static void swap(int[] a,int i,int j){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public static void main(String[] args)throws IOException{
int len = Integer.parseInt(br.readLine());
String[] ss = br.readLine().trim().split(" ");
int[] a = new int[len];
for(int i=0;i<len;i++){
a[i] = Integer.parseInt(ss[i]);
}
a = change(a);
StringBuilder sb = new StringBuilder();
for(int tmp : a){
sb.append(tmp).append(" ");
}
System.out.println(sb.toString());
}
}