标签:return 直接 list temp link sort 解决 turn 时间
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;
}
这样的话只需要遍历一次 大大节省了时间
Leetcode905 Sort Array By Parity
标签:return 直接 list temp link sort 解决 turn 时间
原文地址:https://www.cnblogs.com/chengxian/p/12215920.html