力扣75.颜色分类 用异或swap时的注意事项。
问题描述
在做 力扣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 numberreturn; 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,不能用在同一个地址数字的交换。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
