zoukankan      html  css  js  c++  java
  • 刷题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.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    开源Jabber(XMPP) IM服务器介绍
    ejabberd、jabber、jabberd、xmpp辨析
    分布式与集群的区别
    浅谈Javascript事件模拟
    理清javascript的相关概念 DOM和BOM
    js基础学习第一天(关于DOM和BOM)一
    处理机调度和死锁
    C++11 之 " = delete "
    小数的二进制表示
    二进制数的插入
  • 原文地址:https://www.cnblogs.com/siweihz/p/12250153.html
Copyright © 2011-2022 走看看