力扣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,不能用在同一个地址数字的交换。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部