力扣-10.11-75

在这里插入图片描述
荷兰国旗问题

解法一:(自己写的方法)
扫描一遍数组,记下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;
	}
}

方法三:
双指针
不会

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/109011875