题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000
思路一:
双指针:一个指针从前往后寻找第一个为偶数的数,另一个指针从后往前寻找第一个为奇数的数。找到之后,二者交换。
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int l=0;
int h=nums.size()-1;
while(l<h){
while(l<h&&(nums[l]%2==1))//从前往后寻找第一个偶数
l+=1;
while(l<h&&(nums[h]%2==0))//从后往前寻找第一个奇数
h-=1;
if(l<h)
swap(nums[l],nums[h]);
}
return nums;
}
};
思路二:
记录奇数该在的位置,如果该在的位置是偶数,便将该位置的数与其最相近的奇数交换。
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int index=-1;//当前奇数该在的位置
int n=nums.size();
for(int i=0;i<n;i++){
if(nums[i]%2==1){
index+=1;
if(i!=index)//当前index所在位置为偶数
swap(nums[i],nums[index]);
}
}
return nums;
}
};