刷题75. Sort Colors

一、题目说明

题目75. Sort Colors,给定n个整数的列表(0代表red,1代表white,2代表blue),排序实现相同颜色在一起。难度是Medium。

二、我的解答

这个是一个排序,还是简单的,代码如下:

class Solution{
	public:
		void sortColors(vector<int>& nums){
			int num0=0,num1=0,num2=0;
			for(int i=0;i<nums.size();i++){
				if(nums[i]==0) num0++;
				if(nums[i]==1) num1++;
				if(nums[i]==2) num2++;
			}
			
			for(int j=0;j<nums.size();j++){
				if(j<num0) nums[j] = 0;
				else if(j<num0+num1) nums[j] = 1;
				else nums[j] = 2;
			}
		}
};

性能如下:

Runtime: 8 ms, faster than 10.95% of C++ online submissions for Sort Colors.
Memory Usage: 8.6 MB, less than 77.19% of C++ online submissions for Sort Colors.

三、优化措施

上述代码是2此遍历,其实只需要1此遍历,题目比较简单除此之外就不优化了:

class Solution{
	public:
		void sortColors(vector<int>& nums){
			int left=0,right=nums.size()-1;
			while(left<right){
				while(left<right && nums[left]==0){
					left++;
				}
				while(left<right && nums[right]==2){
					right--;
				}
				if(left<right && nums[left]==2 && nums[right]==0){
					swap(nums[left],nums[right]);
					left++;
					right--;
				}else{
					for(int t=left+1;t<=right;t++){
						if(nums[t]==0){
							swap(nums[left],nums[t]);
							left++;
							break;
						}else if(nums[t]==2){
							swap(nums[t],nums[right]);
							right--;
							break;
						}else if(t==right){
							swap(nums[right],nums[left]);
							left++;
							right--;
							break;
						}
					}					
				}

			}
		}
};

性能如下:

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Sort Colors.
Memory Usage: 8.7 MB, less than 77.19% of C++ online submissions for Sort Colors.
posted @ 2020-02-22 14:25  siwei718  阅读(138)  评论(0编辑  收藏  举报