26. Remove Duplicates From Sorted Array

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums.length <= 1) {
            return nums.length;
        }
        
        // p: the rightest endpoint pointer of a non-repeating subarray
        // q: the pointer to detect new non-repeating number
        int p = 0;
        int q = 1;
        
        // q keeps moving until it finds a non-repeating number or reaches to the end of the array.
        while (q < nums.length) {
            if (nums[p] != nums[q]) {
                nums[p + 1] = nums[q];
                p++;
            }
            q++;
        }
        
        // return the length of the non-repeating "array"
        return p + 1;
    }
}