leetcode 上面有900多道题了?
905. Sort Array By Parity
题意:给定一个一维数组,将数组中的偶数移动到数组的首部,奇数放在数组的尾部。
Input: [3,1,2,4] Output: [2,4,3,1] The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
一看就知道用双指针。一个在数组头,一个在数组尾。左边的指针判断指向的值是否是奇数,是就判断右边指针是否是偶数。当左指针满足奇数,同时右指针满足偶数时,交换两边的值。如果左指针的值不是奇数,则+1.如果右边的指针不是偶数,则+1.
两个指针相遇,说明相遇的点的左面全是偶数,相遇点的右面全是奇数,完成。
先放代码,如下:
class Solution {
public int[] sortArrayByParity(int[] A) {
if( A == null) return A;
int l = 0;
int r = A.length - 1;
int temp ;
while (l < r){
if(A[l] % 2 == 1 && A[r] % 2 == 0){
temp = A[l];
A[l] = A[r];
A[r] = temp;
l++;
r--;
}
if(A[l] % 2 == 0){
l++;
}
if(A[r] % 2 == 1){
r--;
}
}
return A;
}
}
原理图如下:
收工!
来源:oschina
链接:https://my.oschina.net/u/101979/blog/2120273