分割一个整数数组,使得奇数在前偶数在后。
样例
给定 [1, 2, 3, 4]
,返回 [1, 3, 2, 4]
。
思路二: 时间复杂度是O(n)的解法:用一头一尾的双指针方法往中间扫描,如果发现有偶数出现在奇数前面的情况,就交换他们的位置,直到扫描完整个数组。
class Solution {
public:
/**
* @param nums: a vector of integers
* @return: nothing
*/
void partitionArray(vector<int> &nums) {
int i=0;//初始化指针i,让它指向数组第一个元素
int j=nums.size()-1;//初始化指针j,让它指向数组最后一个元素
while(i<j){
while(nums[i]%2==1){//后移i,直到它指向偶数
i++;
}
while(nums[j]%2==0){ //前移j,直到它指向奇数
j--;
}
if(i<j){ //交换值
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
};