LEETCODE 75. 颜色分类

LEETCODE 75. 颜色分类_第1张图片

class Solution {
public:
    void sortColors(vector<int>& nums) {
        //先定0
        int i,j;
        i=0;
        j=0;
        int n=nums.size();
        while(j<n){
            if(nums[j]==0){
                int tmp=nums[j];
                nums[j]=nums[i];
                nums[i]=tmp;
                j+=1;
                i+=1;
            }
            else{
                j+=1;
            }
        }
        //对[i,n]处理,定1
        int i1=i;
        j=i1;
        while(j<n){
            if(nums[j]==1){
                int tmp=nums[j];
                nums[j]=nums[i1];
                nums[i1]=tmp;
                j+=1;
                i1+=1;
            }
            else{
                j+=1;
            }
        }
        
    }
};

LEETCODE 75. 颜色分类_第2张图片
三个动的变量:
第一时间想到控制变量

学习到的方法,分三类:排序 指针 赋值
我的是指针,但赋值太妙了


class Solution {
public:
    void sortColors(vector<int>& nums) {
        //学习 - 关注赋值 
        int n0,n1;
        n0=0;
        n1=0;
        for(int i=0;i<nums.size();i++){
            int num=nums[i];
            nums[i]=2;
            if(num<2){
                nums[n1++]=1;
            }
            if(num<1){
                nums[n0++]=0;
            }
        }
        
    }
};

隐藏保证

  1. n1 n0不会超过i
  2. 但其实说赋值,还是关注指针

你可能感兴趣的:(leetcode,算法)