LeetCode 75. Sort Colors
链接: leetcode-cn.com/problems/so…
题目描述
给定一个包含 n 个颜色为红色、白色或蓝色对象的数组编号,对它们进行就地排序,以便相同颜色的对象相邻,颜色按红色、白色和蓝色的顺序排列。
用整数 0、1 和 2 分别表示红色、白色和蓝色。
思路
- 使用三个指针,
red、white、blue,分别指向红色、白色、蓝色。 - 初始化时,
red指向第一个元素,white指向第一个元素,blue指向最后一个元素。 - 移动
white指针,当white指向的元素为红色时,交换red和white指向的元素,red和white指针都向后移动一位;当white指向的元素为白色时,white指针向后移动一位;当white指向的元素为蓝色时,交换white和blue指向的元素,blue指针向前移动一位。 - 当
white指针大于blue指针时,结束循环。
代码
class Solution {
public:
void sortColors(vector<int>& nums) {
auto red = nums.begin(), white = nums.begin(), blue = nums.end() - 1;
while (white <= blue) {
if (*white == 1) white++;
else if (*white == 0) swap(*white++, *red++);
else swap(*white, *blue--);
}
}
};