题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
1、0 <= nums.length <= 50000
2、0 <= nums[i] <= 10000
示例
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
解法
1. 遍历,拼接数组
遍历数组,数组1存奇数,数组2存偶数,拼接数组1和数组2
C++
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int len = nums.size();
vector<int> res1;
vector<int> res2;
for (int i = 0; i < len; ++i) {
if (nums[i] % 2 != 0) {
res1.push_back(nums[i]);
} else {
res2.push_back(nums[i]);
}
}
len = res2.size();
for (int i = 0; i < len; ++i) {
res1.push_back(res2[i]);
}
return res1;
}
};
2. 头尾双指针
头尾双指针,交换每一个【偶奇对】
(奇数 & 1) == 1
(偶数 & 1) == 0
C++
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int i = 0;
int j = nums.size() - 1;
while (i < j) {
while(i < j && (nums[i] & 1) == 1) i++;
while(i < j && (nums[j] & 1) == 0) j--;
swap(nums[i], nums[j]);
}
return nums;
}
};