文章目录
-
-
- 题目描述
- [法一 两次遍历](#法一 两次遍历)
- [法二 双指针+一次遍历](#法二 双指针+一次遍历)
- [法三 原地交换](#法三 原地交换)
-
题目描述
法一 两次遍历
cpp
class Solution{
public:
vectro<int> exchange(vector<int>& nums){
vector<int> res;
for(auto & num : nums){
if(num%2==1){
res.push_back(num);
}
}
for(auto & num:nums){
if(num%2==0){
res.push_back(num);
}
}
return res;
}
};
法二 双指针+一次遍历
cpp
class Solution{
public:
vector<int> exchange(vector<int>& nums){
int n=nums.size();
vector<int> res(n);
int left=0, right=n-1;
for(auto & num : nums){
if(num%2==1){
res[left++]=num;
} else {
res[right--]=num;
}
}
return res;
}
};
法三 原地交换
cpp
class Solution{
public:
vector<int> exchange(vector<int>& nums){
int left=0, right=nums.size()-1;
while(left<right){
while(left<right && nums[left]%2==1){ //注意这里是while一直往右走!
left++;
}
while(left<right && nums[right]%2==0){
right--;
}
if(left<right){
swap(nums[left++], nums[right--]);
}
}
return nums;
}
};