leetcode 75:顏色分類
阿新 • • 發佈:2018-12-10
兩次掃描使用計數排序
void sortColors(std::vector<int>& nums) { int a=0; int b=0; int c=0; for(int i=0;i<nums.size();i++){ if(nums[i]==0) a++; if(nums[i]==1) b++; if(nums[i]==2) c++; } for(int i=0;i<a;i++){ nums[i]=0; } for(int i=a;i<a+b;i++) nums[i]=1; for(int i=a+b;i<a+b+c;i++){ nums[i]=2; } }
一次掃描使用交換的方式,可以簡單的解決
void sortColors(std::vector<int>& nums) { int l=0; int r=nums.size()-1; int temp=-1; int i=0; while(i<nums.size()){ if (nums[i] == 0) { if(l<i) { temp = nums[i]; nums[i] = nums[l]; nums[l] = temp; l++; } else i++; } else if (nums[i] == 2) { if(r>i) { temp = nums[i]; nums[i] = nums[r]; nums[r] = temp; r--; }else i++; } else i++; } }