问题描述
在做 力扣75,颜色分类时候遇到的问题。荷兰国旗问题,代码正常写,但最后提交出现多次错误。
代码
class Solution {
public:
void swap(int &a,int &b)
{
a^=b;
b^=a;
a^=b;
}
void sortColors(vector<int>& nums) {
int L=-1,R=(int)nums.size(),index=0;
if(R-L==2) //only one number
return;
if(R-L==3)
if(nums[0]<nums[1])
return;
else
{
swap (nums[0],nums[1]);
return;
}
while(index<R)
{
if(nums[index]<1)
swap(nums[index++],nums[++L]);
else if(nums[index]==1)
index++;
else
swap(nums[index],nums[--R]);
}
}
};
问题解决
去VS调了半天,发现问题出在第三次swap的时候。
else
swap(nums[index],nums[--R]);
此时应当swap(nums[2],nums[2]),但swap之后产生了多余的0。
多次调试之后发现传进去的是对的,但swap完就变了0.。。
百度得知,不能用于同地址交换。
换成了正常的swap解决问题
因此切记!
异或的swap,不能用在同一个地址数字的交换。