75.Sort Colors
https://leetcode.com/problems/sort-colors/discuss/26472
1- Cnt
class Solution {
public void sortColors(int[] nums) {
int cnt0 = 0;
int cnt1 = 0;
int cnt2 = 0;
for(int i : nums){
switch(i){
case 0 :
cnt0++;
break;
case 1 :
cnt1++;
break;
case 2 :
cnt2++;
break;
}
}
int i = 0;
for( ; i < cnt0; i++)
nums[i] = 0;
for( ; i < cnt0 + cnt1; i++)
nums[i] = 1;
for( ; i < nums.length; i++)
nums[i] = 2;
return;
}
}
2-Two pointers
class Solution {
//One pass
public void sortColors(int[] nums) {
int low = 0;
int high = nums.length - 1;
int cur = 0;
//num before low and after high are sorted
while(cur <= high){
if(nums[cur] == 0){
swap(nums, low, cur);
low++;
cur++;
}
else if(nums[cur] == 2){
swap(nums, cur, high);
high--;
}
else{
cur++;
}
}
}
public void swap(int[] nums, int i, int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}