给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数
注意:1、数组下标从0开始!
2、本题有special judge,你可以输出任意一组合法解!同时可以证明解一定存在
[要求]
时间复杂度为
,额外空间复杂度为
第一行一个整数N。表示数组长度
接下来一行N个整数表示数组内的数
输出N个整数。表示调整后的数组
5 1 2 3 4 5
2 1 4 3 5
样例中的输出保证了奇数下标都是奇数
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = Integer.parseInt(sc.nextLine().trim());
String[] s = sc.nextLine().trim().split(" ");
int[] arr=new int[n];
for (int i = 0; i < n; i++) {
arr[i]=Integer.parseInt(s[i]);
}
new Solution().adjustArray(arr);
for (int i = 0; i < n; i++) {
if(i==n-1) System.out.println(arr[i]);
else System.out.print(arr[i]+" ");
}
}
}
}
class Solution {
public void adjustArray(int[] arr){
int count=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]%2!=0) count++;
}
if(count>arr.length/2) adjustArray0(arr);
else{
int i=0;
int j=0;
while(i<arr.length&&j<arr.length){
while (i<arr.length&&arr[i]%2!=0||i%2==0) i++; //找到下标为奇数的偶数
while (j<arr.length&&arr[j]%2==0||j%2!=0) j++; //找到不符合条件的奇数
if(i<arr.length&&j<arr.length){
arr[i]^=arr[j];
arr[j]^=arr[i];
arr[i]^=arr[j];
i++;
j++;
}
}
}
}
public void adjustArray0(int[] arr){
int i=0;
int j=0;
while(i<arr.length&&j<arr.length){
while (i<arr.length&&arr[i]%2==0||i%2!=0) i++; //找到下标为偶数的奇数
while (j<arr.length&&arr[j]%2!=0||j%2==0) j++; //找到不符合条件的偶数
if(i<arr.length&&j<arr.length){
arr[i]^=arr[j];
arr[j]^=arr[i];
arr[i]^=arr[j];
i++;
j++;
}
}
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = scanner.nextInt();
}
int even = 0;
int odd = 1;
while(true){
while(even < n){
if(arr[even] % 2 == 0){
even += 2;
}else{
break;
}
}
while(odd < n){
if(arr[odd] % 2 == 1){
odd += 2;
}else{
break;
}
}
if(even >= n || odd >= n) break;
swap(arr,even,odd);
}
for(int i=0;i<n;i++){
System.out.print(arr[i] + " ");
}
}
public static void swap(int[] arr,int even,int odd){
int temp = arr[even];
arr[even] = arr[odd];
arr[odd] = temp;
}
}