標籤:
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.
void sortColors(vector<int>& nums){//排序時間複雜度O(n)int length=nums.size();int zero=0;int two=length-1;while(zero<length && nums[zero]==0){//找到第一個不為0的數的下標zero++;}while(two>=zero && nums[two]==2){//找到倒數第一個不為2的數的下標,zero前的數都是0two--;} for(int i=zero;i<=two;++i) { if(nums[i]==0) {//如果為0,和zero指向的數交換,zero前移 nums[i]=1;//zero指向的值肯定是1,首先不可能為0,其次,i遍曆過的地方,2都已經換到最後 nums[zero]=0; zero++; } else if(nums[i]==1) {//如果為1,則跳過 continue; } else {//如果為2,則和two指向的數交換,並更新two的值, //和zero不同,two前面的數可能還未排序 nums[i]=nums[two]; nums[two]=2; two--; while(two>=i && nums[two]==2) { two--; } i--;//先向後退一步,因為two指向的數還未進行排序 } }}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
leetCode(30):Sort Colors