题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
思路:
- 采用双指针
- 创建fast和low指针
- fast指向数组尾部,low指向数组头部
- fast向左移动,指向奇数时停止,low向右移动,指向偶数时停止
- 当low>fast时结束
代码:
int* exchange(int* nums, int numsSize, int* returnSize) {
int* fast = &nums[numsSize-1];
int* low = nums;
int tmp = 0;
while (low < fast) {
if ((*low & 1)!= 0) low++;
if ((*fast & 1)== 0) fast--;
if ((*low & 1) == 0 && (*fast & 1) != 0&&low<fast) {
tmp = *low;
*low = *fast;
*fast = tmp;
}
}
*returnSize = numsSize;
return nums;
}