leetcode-75. 颜色分类

 

leetcode-75. 颜色分类

 

class Solution {
public:
    void sortColors(vector<int>& nums) {

        int i = 0;
        int j = nums.size()-1;
        int left = 0;
        int right = nums.size()-1;
        // 遍for循环,第一遍 移动0;
        while(i<=nums.size()-1){
            if(nums[i]==0){
                int temp = nums[i];
                nums[i] = nums[left];
                nums[left] = temp;
                left++;
            }
            i++;
            
        }
        // 第二遍移动2;
        while(j>=0){
            if(nums[j]==2){
                int temp = nums[j];
                nums[j] = nums[right];
                nums[right] = temp;
                left++;
                right--;
            }
            j--;
        }
        return;

    }
};

 只需一次遍历

class Solution {
public:
    void sortColors(vector<int>& nums) {

        int left = 0;  // 令左指针左边的数都为1
        int right = nums.size()-1;  // 令右指针右边的数都为2
        int i = 0;  // i进行遍历,
        // 遍for循环,第一遍 移动0;
        while(i<=right){
            if(nums[i]==0){
                int temp = nums[i];
                nums[i] = nums[left];
                nums[left] = temp;
                left++;
                i++;
            }else if(nums[i]==2){
                int temp = nums[i];
                nums[i] = nums[right];
                nums[right] = temp;
                right--;  // 不执行i++,因为还需要判断交换后的值
            }else{
                i++;
            } 
        }
        return;


    }
};

 

上一篇:LeetCode 算法75 颜色分类


下一篇:算法——占据面试比重 75%!盘点程序员必备 10 大算法