【Leetcode】26.删除有序数组中的重复项 (数组双指针)

leetcode-26.png

这是一个典型的双指针的问题
最后需要返回去重之后的数组长度即可

需要在原数组上进行操作
思路也比较简单
因为给定的数组是已经排序号的数组,只需要去重即可
slow指针指向去重后的数组末尾,fast指针指向遍历的当前数字
比较slow与fast所指向的元素
如果相等,那么fast需要继续前进,直到遇到所指向的元素与slow指向的元素不相等时
如果不相等,那么就可以将fast所指向的元素赋给 slow+1 所指向的元素,并且此时 slow++

class Solution {
    public int removeDuplicates(int[] nums) {
        int i = 0;
        int j = 0;
        while(j < nums.length){
            if(nums[i] == nums[j]){
                ++j;
            }else{
                nums[i + 1] = nums[j];
                ++i;
            }
        }
        return i+1;
    }
}

可以将上诉else代码块中的代码简写为

nums[++i] = nums[j];

你可能感兴趣的:(【Leetcode】26.删除有序数组中的重复项 (数组双指针))