LeetCode75 颜色分类
题目描述
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
想法
可以参考快速排序,只是要处理相等的情况
而且不需要递归
代码实现
public class LeetCode75 {
public static void main(String[] args) {
int nums[]= {2,0,1};
LeetCode75 lc75=new LeetCode75();
lc75.sortColors(nums);
for(int i=0;i<nums.length;i++) {
System.out.println(nums[i]);
}
}
public void sortColors(int[] nums) {
if(nums.length<2) {
return;
}
int p=0,r=0;
int q=nums.length-1;
while(p<=q) {
if(nums[p]==1) {
p++;
}else if(nums[p]==0) {
swap(nums,r,p);
p++;
r++;
}else {
swap(nums,p,q);
q--;
}
}
}
private void swap(int[] nums, int index1, int index2) {
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}