关闭

75. Sort Colors

标签: c++
164人阅读 评论(0) 收藏 举报
分类:

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.

题意:数组中含有0,1,2。把数组所有的2放一块儿,所有的1放一块儿,所有的0放一块儿。

思路:类似于快排的思想,开辟存放0的空间,不断增加。也开辟存放2的空间,不断移动指针。中间放1.

class Solution {
public:
	void sortColors(vector<int>& nums) {
		int i = -1;
		int j = nums.size();
		for (int k = 0; k < j; k++){
			if (nums[k] == 0){
				i++;
				swap(nums[i], nums[k]);
			}
			else if (nums[k] == 2){
				j--;
				swap(nums[j], nums[k]);
				k--;
			}
			else{
				//do nothing
			}
		}
	}
};

二刷:

思路同上

class Solution {
public:
	void sortColors(vector<int>& nums) {
		int i = -1, j = nums.size();
		int k = 0;
		while (k < j){
			switch (nums[k]){
			case 0:
				i++;
				swap(nums[i], nums[k]);
				break;
			case 1:
				break;
			case 2:
				j--;
				swap(nums[k], nums[j]);
				break;
			}
			k++;
		}
		return;
	}
};









0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41171次
    • 积分:2681
    • 等级:
    • 排名:第14355名
    • 原创:241篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条