力扣刷题笔记-删除数组中的重复元素

纠结要不要离开杭州

删除数组中的重复元素

思想

双指针/快慢指针

  1. 只有当两个元素不相等的时候才发生复制和p指针向后移动
  2. 如果两个指针指向的元素相等,则q指针向后移动
  3. p和q不相邻的情况下才发生复制和替换,如果相邻,只是简单的q指针向后移动

p指针是慢指针,q指针是快指针,当p和q指向的元素相同的时候,q指针继续向后移动,直到元素不相等,然后将q指针指向的元素复制给p的下一个元素(之所以是下一个,q一直在向后移动,注意向后移动的前提是元素相同,那么就是覆盖掉相同的元素),同时p指针向后移动一个位置。

关键点

p和q之间应该隔一个元素,

循环

便利数组,用while循环

code

class Solution {
    public int removeDuplicates(int[] nums) {
        int p = 0;
        int q = 1;
        while(q < nums.length){
            if(nums[p] != nums[q]){
                if((q-p) > 1){
                    nums[p+1] = nums[q];
                }
                p++;
            }
            q++;
        }
        return p+1;
    }
}

p+1

p是从0开始的,所以要返回p+1才是新数组的长度

posted @ 2024-07-17 10:04  大海0101  阅读(8)  评论(0编辑  收藏  举报