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;
    }
}

results matching ""

    No results matching ""