您的位置:首页 > 其它

【LeetCode】Sort Colors

2014-03-01 14:29 337 查看
Sort Colors

Total Accepted: 8218 Total Submissions: 26914 My Submissions

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Note:

You are not suppose to use the library's sort function for this problem.

click to show follow up.

题目大意,数组中有0,1,2三种类型的数字,代表红白绿三种颜色。请按红白绿顺序排好数组。

最简单暴力的方法,统计0,1,2三个数字的个数,然后按照次序依次排好。这个效率貌似最高,速度最快。

其他的办法就是cur代表当前数字,low代表0,high代表2。如果cur为1,直接判断下一个数字,如果是0,和low交换。如果是2,和high交换。

Java AC 1

public class Solution {
    public void sortColors(int[] A) {
        if(A == null || A.length == 0){
            return;
        }
        int len = A.length;
        int numArr[] = new int[3];
        for(int i = 0; i < len; i++){
            numArr[A[i]]++;
        }
        int k = 0;
        for(int i = 0; i < 3; i++){
            for(int j = 0; j < numArr[i]; j++){
                A[k] = i;
                k++;
            }
        }
    }
}

Java AC 2

public class Solution {
    public void sortColors(int[] A) {
        if(A == null || A.length == 0){
            return;
        }
        int len = A.length;
        int low = 0;
        int high = len-1;
        int k = 0;
        while(k <= high){
            if(A[k] == 0){
            	swap(A, k, low);
            	low++;
            	k = (k <= low) ? low : k;
            }else if(A[k] == 2){
            	swap(A, k, high);
            	high--;
            }else {
            	k++;
			}
        }
    }
    public void swap(int A[], int i, int j){
        int temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
}
Python AC

class Solution:
    # @param A a list of integers
    # @return nothing, sort in place
    def sortColors(self, A):
        alen = len(A)
        numArr = [0, 0, 0]
        for i in range(alen):
            numArr[A[i]] += 1
        k = 0
        for i in range(3):
            for j in range(numArr[i]):
                A[k] = i
                k += 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: