你可以返回满足此条件的任何数组作为答案。
示例:
输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
提示:
1 <= A.length <= 5000
0 <= A[i] <= 5000
大概有几种 1. 新建一个数组,对原数组进行遍历,偶数从头部放进去,奇数从尾部放进去。
2. 从前往后找奇数,从后往前找偶数,然后交换。
3. 双层循环,外循环找奇数,内循环找偶数,然后交换。
class Solution {
public int[] sortArrayByParity(int[] A) {
int len = A.length;
int front = 0, end = len-1;//设置两个指针,一个指向头部,一个指向尾部
while(front < end)
{
while(front < len && A[front]%2 == 0) //从前往后找偶数
front++;
while(end >= 0 && A[end]%2 == 1) //从后往前找奇数
end--;
if(front < end)
{
int temp = A[front]; //将奇数往前挪,偶数往后挪
A[front] = A[end];
A[end] = temp;
}
}
return A;
}
}
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortArrayByParity(int* A, int ASize, int* returnSize) {
int *num = (int *)malloc(sizeof(int)*ASize);
*returnSize=ASize;
int i,j;
for(i=0;i<ASize;i++) {
if(A[i] % 2 == 1) {//是奇数,往后放
for(j=ASize-1;j>=0;j--) {
if(j > i) {
if(A[j] % 2 == 0) {//是偶数,往前放
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
}
}
}
for(i=0;i<ASize;i++) {
num[i]=A[i];
}
return num;
}
原文:https://www.cnblogs.com/lick468/p/10657007.html