zoukankan      html  css  js  c++  java
  • leetcode 75 Sorted Colors

    两种解法

    1)记录0和1的个数

    然后按照记录的个数将0和1重新放入原数组,剩下的补2

    2)双指针left,right

    left表示0~left-1都为0,即i之前都为0

    right表示right+1~nums.length都为2,即j之后都为2

    遍历原数组

      a)遇到为0的就把当前nums[i]与nums[left]交换

      b)遇到为2的就交换nums[i]&nums[right],注意,写代码的时候要考虑交换过来的nums[right]有可能是2,如果i正常迭代变成i+1,漏掉了nums[right]为2的情况,所以我们这里i要减1

    那么为什么前面a)不需要i减一呢?因为按照我们对left的定义,nums[left]不可能为0

     1 class Solution {
     2     public void sortColors(int[] nums) {
     3         int len = nums.length;
     4         int index=0, i=0, j=len-1;
     5         
     6         while(index <= j){
     7             if(nums[index] == 0){
     8                 nums[index] = nums[i];
     9                 nums[i++] = 0;
    10             }
    11             
    12             if(nums[index] == 2){
    13                 nums[index] = nums[j];
    14                 nums[j--] = 2;
    15                 index--;
    16             }
    17             index++;
    18         }
    19         
    20     }
    21 }
  • 相关阅读:
    统计:概述
    概率论总结
    概率论13 中心极限定律
    概率论12 矩与矩生成函数
    概率论11 协方差与相关系数
    概率论10 方差与标准差
    概率论09 期望
    概率论08 随机变量的函数
    mysql 分区
    Linux 搭建svn版本库
  • 原文地址:https://www.cnblogs.com/hwd9654/p/10925934.html
Copyright © 2011-2022 走看看