leetcode(颜色分类-sort)(荷兰国旗问题)

方法一 暴力排序法

  1. 方法一:暴力排序法

var sortColors = function(nums) {
   nums=nums.sort((a,b)=>a-b)
   return nums
};
复制代码

暴力排序,比较简单

方法二:双指针

  1. 方法二:双指针

var sortColors = function(nums) {
    let p0=0   // 用来交换0
    let p1=0   // 用来交换1
    for(let i=0;i<nums.length;i++){
       if(nums[i]==1){        // i指针如果等于1 与p1指针交换 
           let t=nums[i]
           nums[i]=nums[p1]
           nums[p1]=t
           ++p1              // p1向后移动一位
       }
       else if(nums[i]==0){  // i指针如果等于0 与p0指针交换 
           let t=nums[i]     
           nums[i]=nums[p0]
           nums[p0]=t
           if(p0<p1){       //  如果p0 < p1 我们此时已经将一些1排好了,此时交换一定会把1排出去,造成 错误,因此需要把交换出去的1重新排回去
               let t=nums[i]
               nums[i]=nums[p1]
               nums[p1]=t
           }
           ++p0              // p0,p1都向后移动一位
           ++p1
       }
    }
};
复制代码

详见leetcode:75 颜色分类

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享