作品:
vector<int> nums = {2,0,2,1,1,0};
int low = 0,mid = 0,high = nums.size() - 1;
while(mid<=high){
if(nums[mid]==0){
swap(nums[mid],nums[low]);
mid++;
low++;
}
else if(nums[mid]==1){
mid++;
}
else if(nums[mid]==2){
swap(nums[mid],nums[high]);
high--;
}
}
如果我只使用“if”3次,代码不起作用,但使用1次就可以了,为什么? 不起作用:
vector<int> nums = {2,0,2,1,1,0};
int low = 0,mid = 0,high = nums.size() - 1;
while(mid<=high){
if(nums[mid]==0){
swap(nums[mid],nums[low]);
mid++;
low++;
}
if(nums[mid]==1){
mid++;
}
if(nums[mid]==2){
swap(nums[mid],nums[high]);
high--;
}
}
我试图在leetcode上解决这种排序颜色问题,如果我只使用if语句它不起作用。
你正在第一个身体内改变
mid
。在第一个版本中,您的三向分区排除其他分支,这等于:
while(mid<=high){
if(nums[mid]==0){
swap(nums[mid],nums[low]);
mid++;
low++;
continue;
}
if(nums[mid]==1){
mid++;
continue;
}
if(nums[mid]==2){
swap(nums[mid],nums[high]);
high--;
continue;
}
}
在 C++ 中可以用更简洁的方式编写:
while(mid<=high)
switch(nums[mid]) {
case 0: swap(nums[mid++],nums[low++]); continue;
case 2: swap(nums[mid++],nums[high]); continue;
case 1: high--;
}