Leetcode905 Sort Array By Parity

public int[] sortArrayByParity(int[] A) {
LinkedList<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < A.length; i++) {
if (A[i] % 2 == 0) {
list.add(A[i]);
}
}
for (int j = 0; j < A.length; j++) {
if (A[j] % 2 == 1) 
list.add(A[j]);
}
for (int k = 0; k < A.length; k++) {
A[k] = list.get(k);

}
return A;
}

只打败了百分之5的时间复杂度,而且需要O(n)的空间

方法解析里用到了位置交换,一开始也想到了原地置换,但是没想出来解决办法

dicuss里提出  从第一个元素开始遍历  是奇数的话直接跳过 是偶数的话 则和另一个浮标表示的奇数进行替换

因为前面遍历的时候 走过的都是奇数元素  后面直接把偶数元素换到前面就好了 然后奇数去了后面偶数的位置

偶数的前面都是奇数

这样就完成了替换

public int[] sortArrayByParity(int[] A) {
for(int i=0,j=0;j<A.length;j++){
if(A[j]%2==0){
int temp=A[j];
A[j]=A[i];
A[i]=temp;
i++;
}
}
return A;
}

这样的话只需要遍历一次 大大节省了时间

猜你喜欢

转载自www.cnblogs.com/chengxian/p/12215920.html