LeetCode 数据结构—颜色分类

LeetCode 数据结构—颜色分类

 

 LeetCode 数据结构—颜色分类

 

这道题如果不考虑进阶方法,可以很轻松的使用排序直接得到答案:

  public void sortColors(int[] nums) {
            Arrays.sort(nums);
    }

但如果需要按照进阶的要求,不允许使用自带排序并要求一次遍历,我们可以用双指针进行求解。我们通过两个指针,pre0和pre1,分别表示下一个将于0或者1交换位置的下标。因为最终结果0会排在1的前面,所以pre0一定小于或等于pre1,而当检索到nums[i]=0且在pre0<pre1时,发生的情况是,我们已经插入过1,所以此时我们需要在pre0下标处改为0后,将置换出去的1补在pre1的下标上,在将原来的pre1对应的值放置在i的位置上。

    public void sortColors(int[] nums) {
           int pre1=0;
           int pre0=0;
          for(int i=0;i<nums.length;i++)
          {
              if(nums[i]==1)
              {
                  int temp=nums[i];
                  nums[i]=nums[pre1];
                  nums[pre1]=temp;
                  pre1++;
                  continue;
              }
              if(nums[i]==0)
              {
                    int temp=nums[i];
                    nums[i]=nums[pre0];
                    nums[pre0]=temp;
                  if(pre1>pre0){
                     int temp1=nums[i];
                     nums[i]=nums[pre1];
                     nums[pre1]=temp1;
                     
                  }
                
                    pre1++;
                    pre0++;
                
              }
          }
           
    }

 

上一篇:mysql不同表列字段复制


下一篇:leetcode:打家劫舍(java,考察点:动态规划)