题目:
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示例:
输入:[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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-array-by-parity-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
结果:
解题思路:
1,循环判断当前A里面的值和下标是否奇偶相同。
2,如果不同,则从当前下标的下一个开始,循环,每一次i增加2,确保判断的都是奇数位或者偶数位置。
3,如果内循环的A值和下标的奇偶不同,则与之前的进行位置调换。
代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortArrayByParityII(int* A, int ASize, int* returnSize){
for(int i = 0; i < ASize; i++) {
if(A[i] % 2 != i %2) {
for(int j = i + 1; j < ASize; j += 2) {
if(A[j] % 2 != j % 2) {
A[i] += A[j];
A[j] = A[i] - A[j];
A[i] = A[i] - A[j];
break;
}
}
}
}
*returnSize = ASize;
return A;
}