LeetCode 75. Sort Colors(排序颜色)

转载 2018年04月16日 19:26:26

在网上,看到一个只需要遍历一遍聪明的做法。

如果只能扫一遍,很容易想到的就是左边存放0和1,右边存放2.两边往中间靠。

设置两个index,left记录第一个1的位置,left左边为0,right记录第一个非2的位置,right右边为2.

然后使用i从头到尾扫一遍,直到与right相遇。

i遇到0就换到左边去,遇到2就换到右边去,遇到1就跳过。

需要注意的是:由于left记录第一个1的位置,因此A[left]与A[i]交换后,A[left]为0,A[i]为1,因此i++;

而right记录第一个非2的位置,可能为0或1,因此A[right]与A[i]交换后,A[right]为2,A[i]为0或1,i不能前进,要后续判断。

由此该数组分为4段:[0,left)-->0; [left,i)-->1; [i,right]-->乱序; (right,n-1]-->2

0  0  0  1  1  1  2  1  0  2  1  2  2  2

           ^         ^             ^

          left         i            right


class Solution {
public:
    void sortColors(int A[], int n) {
        int left = 0;
        int right = n-1;
        int i = 0;
        while(i <= right)
        {
            if(A[i] == 0)
            {
                swap(A[left], A[i]);
                left ++;
                i ++;
            }
            else if(A[i] == 1)
            {
                i ++;
            }    
            else
            {
                swap(A[i], A[right]);
                right --;
            }
        }
    }
};

还有一种我觉得类似,这个也是找三个数最后一个的位置。

class Solution {
public:
    void sortColors(int A[], int n) {
        int i = -1;
        int j = -1;
        int k = -1;
        for(int p = 0; p < n; p ++)
        {
            //根据第i个数字,挪动0~i-1串。
            if(A[p] == 0)
            {
                A[++k] = 2;    //2往后挪
                A[++j] = 1;    //1往后挪
                A[++i] = 0;    //0往后挪
            }
            else if(A[p] == 1)
            {
                A[++k] = 2;
                A[++j] = 1;
            }
            else
                A[++k] = 2;
        }


    }
};

leetCode 75.Sort Colors (颜色排序) 解题思路和方法

Given an array with n objects colored red, white or blue, sort them so that objects of the same colo...
  • xygy8860
  • xygy8860
  • 2015-07-19 16:38:00
  • 732

【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】

【075-Sort Colors (颜色排序)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array with n objects colored ...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-30 06:36:18
  • 2201

【LeetCode】Sort Colors 解题报告

【题目】 Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • ljiabin
  • ljiabin
  • 2014-10-13 20:51:44
  • 4996

LeetCode 75(Sort Colors)Java

原题:Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • Jassy1994
  • Jassy1994
  • 2016-12-01 09:41:24
  • 186

LeetCode(75)Sort Colors (荷兰三色旗问题 Dutch National Flag)

题目如下: The flag of the Netherlands consists of three colours: red, white and blue. Given balls of the...
  • feliciafay
  • feliciafay
  • 2014-02-10 03:42:16
  • 4769

LeetCode(75) Sort Colors

题目Given an array with n objects colored red, white or blue, sort them so that objects of the same co...
  • fly_yr
  • fly_yr
  • 2015-09-17 20:00:39
  • 1000

Leetcode_75_Sort Colors

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302343 Given an array wi...
  • pistolove
  • pistolove
  • 2015-01-30 07:32:32
  • 1447

Leetcode75 Sort Colors

leetcode代码已经放入github:[https://github.com/gaohongbin/leetcode](https://github.com/gaohongbin/leetcode...
  • MMChinaMM
  • MMChinaMM
  • 2015-10-18 20:42:20
  • 510

leetcode Sort Colors java实现

描述:给一个数组,数组由三种颜色对象组成,分别为红、白、蓝,对数组进行排序,使相同颜色的对象相邻,按照先红再白最后蓝的顺序进行排列。 在这里,我们使用整数0、1、2来分别代表红白蓝三种颜色。(不要使...
  • a15994269853
  • a15994269853
  • 2014-03-06 15:00:29
  • 1653

[Java语言] Sort Colors 颜色排序

Sort Colors Given an array with n objects colored red, white or blue, sort them so that objects o...
  • hxm102581
  • hxm102581
  • 2016-03-19 17:37:11
  • 375
收藏助手
不良信息举报
您举报文章:LeetCode 75. Sort Colors(排序颜色)
举报原因:
原因补充:

(最多只允许输入30个字)