922-按奇偶校验排序数组II

时间:2023-12-17 20:02:38

给定一组A 非负整数,A中的一半整数是奇数,而整数的一半是偶数。 对数组进行排序,以便每当A[i]奇数时,i都是奇数; 无论何时A[i]均匀,i均匀。 您可以返回满足此条件的任何答案数组。

例1: 输入:[4,2,5,7]  输出:[4,5,2,7]  说明: [4,7,2,5],[2,5,4,7],[2,7,4] ,5]也将被接受。

注意:

2 <= A.length <= 20000

A.length % 2 == 0

0 <= A[i] <= 1000

解法一:使用三次while循环,第二次跟第三次分别是为了查找出数组中索引跟索引位置数组元素奇偶不同时索引的值。然后将两个索引所谓数组元素互换。
public int[] sortArrayByParityII(int[] A) {
int i=0;
int j=1;
int m=A.length;
while(i<m&&j<m)
{
while (i<m&&A[i]%2==0)
{
i+=2;
}
while (j<m&&A[j]%2==1){
j+=2;
}
if (i<m&&j<m)
{
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
return A;
} 解法2:只使用一个while循环,此循环用于得出索引跟索引元素不同时的索引值。然后通过if判断当索引小于数组长度且偶索引元素为奇,奇索引元素为偶时交换元素。
public int[] sortArrayByParityII(int[] A) {
int i=0;
int j=1;
int m=A.length;
while(i<m&&j<m)
{
if (i<m&&A[i]%2==0)
{
i+=2;
}
if (j<m&&A[j]%2==1){
j+=2;
}
if (i<m&&j<m&&A[i]%2==1&&A[j]%2==0)
{
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
return A;
}