75. 颜色分类

学习交换元素的另一种写法

void swap(int[] nums,int x,int y){
        if(x==y)return;//重要,没有这一句当x==y时两个都变成0
        nums[x]=nums[x]^nums[y];
        nums[y]=nums[x]^nums[y];
        nums[x]=nums[x]^nums[y];
    }

本题解:
小于2的放在[0,pos2]的位置
在上面基础上,小于1的放在[0,pos1]的位置
也可以说:
小于2的放在(pos1,pos2]的位置

class Solution {
    public void sortColors(int[] nums) {
        
        int pos2=-1;
        int pos1=-1;
        for(int i=0;i<nums.length;i++){
              if(nums[i]<2){
                  pos2++;
                  swap(nums,pos2,i);
                  if(nums[pos2]<1){
                      pos1++;
                      swap(nums,pos2,pos1);
                  }
              }
        }

    }
    void swap(int[] nums,int x,int y){
        if(x==y)return;//重要,没有这一句两个都变成0
        nums[x]=nums[x]^nums[y];
        nums[y]=nums[x]^nums[y];
        nums[x]=nums[x]^nums[y];
    }
}
posted @ 2021-06-12 15:01  wsshub  阅读(35)  评论(0)    收藏  举报