给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
要求我们原地进行排序,所以我们不能使用快排等算法,我们可以使用双指针的方式进行排序
基本解题思路
代码展示
class Solution {
public void sortColors(int[] nums) {
//使用双指针进行解决
int p0=0;
int p2=nums.length-1;
int i=0;
while(i<=p2){
if(nums[i]==0){
int temp=nums[i];
nums[i]=nums[p0];
nums[p0]=temp;
p0++;
}
if(nums[i]==2){
int temp=nums[i];
nums[i]=nums[p2];
nums[p2]=temp;
p2--;
i--;
}
i++;
}
}
}