三向切分问题

https://leetcode.cn/problems/sort-colors/
数据特殊,可利用排序直接得到答案啊,也可以利用双指针法。
设置两个指针l,r。l从0开始,r从末尾开始。遍历数组,当i遇到0时与l指针元素互换位置。当遇到2时与r指针互换位置。注意到:与r互换位置后,nums[i]有可能仍为2,所以需要循环进行交换判断。 与l交换时没有这样的问题,因为i为从左到右扫描,不可能交换后仍为0。
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
void sortColors(vector<int>& nums) {
int l = 0;
int r =nums.size()-1;
for(int i=0;i<r;i++)
{
while(i<=r && nums[i]==2)
{
swap(nums[i],nums[r]);
--r;
}
if(nums[i]==0)
{
swap(nums[i],nums[l]);
++l;
}
}
}
};

三向切分问题
http://jty-123.github.io/2022/07/09/三向切分(荷兰国旗问题)/
作者
Jty
发布于
2022年7月9日
许可协议