LeetCode简单篇----2----删除排序数组中的重复项

LeetCode官方题解:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-xiang-by-/

目录

一、需求

二、双指针法

思路分析

代码实现

复杂度分析


一、需求

       A:给定排序数组,原地删除重复出现的元素,即每个元素只出现一次;

       B:返回移除元素后数组的新长度;

       C:要求不能使用额外的数组空间,额外空间为O(1);

二、双指针法

  • 思路分析

       A:定义下标i来保存不重复的元素,定义下标j是为了寻找不重复的元素;

       B:首先第一个元素与第二个元素比较,相等说明这两个值相等,即重复了,因为j是为了寻找不重复

         的元素,所以j要继续增加,而i不变;

       C:找到与第一个元素不重复的元素后,因为下标i是来保存不重复的元素的,此时要i++,然后保存该

         不重复元素;

       D:以[1,1,2,2,2,3]为例

         a:nums[0]与nums[1]比较,相等,此是下标j为1,它要继续向后找到和nums[0]不一样的值;

         b:j=2时,nums[0]!=nums[2],那么利用i使得nums[1]=nums[2],相当于把不重复元素移动到了

           nums[0]的后面,此时数组为[1,2,2,2,2,3];

         c:继续查找与nums[1]不重复的元素,找到了nums[5],于是令nums[2]=3,这就相当于在nums[1]

           后面又加入了不重复元素;

         d:i代表的是不重复元素的下标是2,不重复的元素个数为3,新数组的长度即为3,数组中超过新长度

           后面的元素无需考虑;

  • 代码实现

class Solution {
    public int removeDuplicates(int[] nums) {
        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            if (nums[i] != nums[j]) {
                i++;
                nums[i] = nums[j];
            }
        }
        return i+1;
    }
}
  • 复杂度分析

       A:时间复杂度O(n);

       B:空间复杂度O(1);

 

发布了62 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Sruggle/article/details/103796208
今日推荐