1.题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
2.示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
3.思路:
本题思路用双指针:
- 整体思路:首先指定前指针
start
和后指针end
,然后前指针定位偶数,后指针定位奇数,定位到之后将两个值互换,直到数组遍历完成。
4.题解:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* exchange(int* nums, int numsSize, int* returnSize){
*returnSize = numsSize;
int start = 0; //定义头指针
int end = numsSize-1; //定义尾指针
while(start<end){ //当头指针和尾指针没有相撞时
while(start<end&&(nums[start]%2==1)){
start++; //当头指针为奇数时一直向后退推
}
while(start<end&&(nums[end]%2==0)){
end--; //当尾指针为偶数一直向前推
} //当两个循环停止时,前指针为偶数,后指针为奇数
int temp = nums[start]; //设定temp为临时变量,交换两个数
nums[start] = nums[end];
nums[end] = temp;
}
return nums;
}