Leetcode 线性表 Sort Colors

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie


Sort Colors

  Total Accepted: 13005  Total Submissions: 41941

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?


题意:一个元素的值为0,1,2的数组,将其将0,1,2顺序排序
思路:
也是快排中的partition思想。不过这次用的是one versus all,可以推广到其他任意多个颜色
第一次设一个下标为界,将数组分为一边为0,一边非0
第两次设另一个下村为界,将非0的那部分分为一边为1,一边为2

注意void sortColors(int A[], int n) 这里的A虽然以数组的形式声明,但实际上是指针,改变这里数组A里元素的值,会对应改变传到它的参数的值。
复杂度:时间O(n), 空间O(1)

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


};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值