一、题目说明
题目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.
来源:https://www.cnblogs.com/siweihz/p/12250153.html