【LEETCODE】75-Sort Colors

本文介绍了一种解决排序问题的方法,通过两次遍历数组来将被涂成红色、白色或蓝色的物体按照颜色顺序排列,且所有相同颜色的物体相邻。这种方法不依赖于标准库中的排序函数,而是采用计数排序的两步法实现。同时,文章探讨了如何在一次遍历中完成此任务,并仅使用常数空间。最后,提供了一个Python代码示例来展示实现过程。

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.

Follow up:

A rather straight forward solution is a two-pass algorithm using counting sort.

First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's.

Could you come up with an one-pass algorithm using only constant space?


题意:

给一个数组,代表被涂上红色,白色,蓝色的物体,排序使得同样颜色的挨在一起,不要使用内置的排序

red:0

white:1

blue:2


思考:

一个更直接的解法是用counting sort进行two pass的算法

首先,迭代这个数组,数0,1,2的数目,然后用这几个数目重写一下数组

思考如何用one pass的算法并且只使用常数空间


参考:

http://www.cnblogs.com/zuoyuan/p/3775832.html


思路:

首部设一个指针 p0,记录0的位置

尾部设一个指针 p2,记录2的位置

i 从头开始遍历,遇到2 则放在p2上,遇到0 则放在p0上


Python

class Solution(object):
    def sortColors(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        
        if nums==[]:
            return 
        
        p0=0
        p2=len(nums)-1
        i=0
        
        while i<=p2:
            if nums[i]==2:
                nums[i],nums[p2]=nums[p2],nums[i]
                p2-=1
            elif nums[i]==0:
                nums[i],nums[p0]=nums[p0],nums[i]
                p0+=1
                i+=1
            else:
                i+=1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值