荷兰国旗问题
解法一:(自己写的方法)
扫描一遍数组,记下3个数的个数,再更新数组即可
class Solution {
public void sortColors(int[] nums) {
int[] count= {
0,0,0};
for(int i=0;i<nums.length;i++) {
if(nums[i]==0) {
count[0]++;
}else if(nums[i]==1) {
count[1]++;
}else {
count[2]++;
}
}
int m=0;
for(int i=0;i<count.length;i++) {
for(int j=0;j<count[i];j++) {
nums[m++]=i;
}
}
}
}
方法二:
单指针,遍历两次
class Solution {
public void sortColors(int[] nums) {
int p0=0;
// 第一次遍历,把所有的0全部放到前面
for(int i=0;i<nums.length;i++) {
if(nums[i]==0) {
swap(nums,i,p0);
p0++; //p0的值等于有多少个0
}
}
int p1=p0;
// 第二次遍历,把所有的1放到0后面
for(int i=p0;i<nums.length;i++) {
if(nums[i]==1) {
swap(nums,i,p1);
p1++;
}
}
}
public static void swap(int[] nums,int i,int j) {
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
方法三:
双指针
不会