当前位置 博文首页 > 中流击水,浪遏飞舟:一题多解与优化 && 剑指 Offer 21.
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int F=0,R=0;
int size=nums.size();
while(R<size){ //防止最后的++后溢出
while(F<size&&(nums[F]%2)){
F++;
}
if(R<=F){
R=F+1;
}
while(R<size&&!(nums[R]%2)){
R++;
}
if(F>=size||R>=size){ //加这个条件防止后面交换溢出
break;
}
int temp=nums[R];
nums[R]=nums[F];
nums[F]=temp;
F++,R++;
}
return nums;
}
};
int temp=nums[R];
nums[R]=nums[F];
nums[F]=temp;
变成:
swap(nums[F],nums[R]);
修改后的快慢指针解法如下:
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int F=0,R=0;
int size=nums.size();
while(R<size){ //防止最后的++后溢出
if(nums[R]%2){
swap(nums[F],nums[R]);
F++;
}
R++;
}
return nums;
}
};
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int F=0,R=nums.size()-1;
while(F<R){
if(nums[F]&1){
F++;
continue;
}
if(!(nums[R]&1)){
R--;
}
swap(nums[F],nums[R]);
}
return nums;
}
};