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

查看 51|回复 4
作者:NullPointerExce   
纠结要不要离开杭州
删除数组中的重复元素
思想
双指针/快慢指针
[ol]
  • 只有当两个元素不相等的时候才发生复制和 p 指针向后移动
  • 如果两个指针指向的元素相等,则 q 指针向后移动
  • p 和 q 不相邻的情况下才发生复制和替换,如果相邻,只是简单的 q 指针向后移动
    [/ol]
    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  1){
                        nums[p+1] = nums[q];
                    }
                    p++;
                }
                q++;
            }
            return p+1;
        }
    }
    p+1
    p 是从 0 开始的,所以要返回 p+1 才是新数组的长度
  • horizon   
    「纠结要不要离开杭州」
    啥意思
    biutcoder   
    @horizon 当日心情

    jackwaycn   
    得 v2 成笔记站了
    JiangNanLong   
    public int removeDuplicates(int[] nums) {
    int p = 0;
    int q = 1;
    while(q 1 吧
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部