颜色排序--Sort Colors

https://leetcode.com/problems/sort-colors/

Sort Colors

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.

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?

题意:排序成红,白,蓝(0,1,2)

来自http://www.cnblogs.com/zuoyuan/p/3775832.html南郭子綦的解析

解题思路:这道题不允许使用排序库函数。那么最直观的解法是:遍历两遍数组,第一遍对0,1,2计数,第二遍对数组进行赋值,这样是可以ac的。但题目的要求是只使用常数空间,而且只能遍历一遍。那么思路就比较巧妙了。设置两个头尾指针,头指针p0指向的位置是0该放置的位置,尾指针p2指向的位置是2该放置的位置。i用来遍历整个数组,碰到0把它和p0指向的数交换,碰到2把它和p2指向的数交换,碰到1继续向后遍历。有点类似快速排序的分割数组这一步。

 1 class Solution:
 2     # @param {integer[]} nums
 3     # @return {void} Do not return anything, modify nums in-place instead.
 4     def sortColors(self, nums):
 5         A=nums
 6         if A==[]: return A
 7         p0=0; p2=len(A)-1; i=0         #p0在头,p2在尾
 8         while i<=p2:
 9             if A[i]==2:                #遇到2,将2和A[P2]的数互换,p2向前
10                 A[i],A[p2]=A[p2],A[i]  #此时不对i+=1,因为换过来的数依然需要判断
11                 p2-=1
12             elif A[i]==0:              #遇到0,将0和A[p0]的数互换,p0向后
13                 A[i],A[p0]=A[p0],A[i]
14                 p0+=1
15                 i+=1                   #此时i+=1,因为换的A[p0]要么是0要么是1,所以i继续向后
16             else:
17                 i+=1                   #遇到1,继续向后判断
18                                        #p0会前面的1进行修改换成0,不换的1排在中间成为最终结果
19                                        #得到的结果是按0,1,2顺序排序即要求的红,白,蓝
20     

疑问:为什么最后不用return?

时间: 2024-10-06 18:43:07

颜色排序--Sort Colors的相关文章

LeetCode 75. 颜色分类(Sort Colors) 30

75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. 注意: 不能使用代码库中的排序函数来解决这道题. 每日一算法2019/6/2Day 30LeetCode75. Sort Colors 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方

九章算法面试题70 排颜色II sort colors

九章算法官网-原文网址 http://www.jiuzhang.com/problem/71/ 题目 给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序. 在线测试本题 http://www.lintcode.com/zh-cn/problem/sort-colors-ii/ 解答 这道题有两种方法. 方法一: 可以借助一个O(k)的数组bucket,然后扫一遍原来的数组,统计每一种颜色有多少个存放在数组

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

[075-Sort Colors (颜色排序)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 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

Leetcode:Sort colors 计数排序

Sort colors: 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,

LeetCode: Sort Colors 题解

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 bl

【leetcode】Sort Colors(middle)☆

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 bl

LeetCode OJ 75. Sort Colors

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 bl

LeetCode——Sort Colors

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 bl

No.75 Sort Colors

No.75 Sort Colors 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