Leetcode_删除排序数组中的重复项

题目描述:

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 :

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0,1,2,3,4。

你不需要考虑数组中超出新长度后面的元素。

思路:

题目中要求的是在原地删除重复出现的数组,要求使用 O(1) 额外空间,而且还默认了数组是先经过了排序的 O(1) 额外空间,可以考虑使用一个ArrayList数组将每次只出现一次的元素收集,然后再遍历一次ArrayList输出,同样也是需要从数组的最左边开始进行用i作为标记,每次比较j=i+1上的位置的元素和i上的元素是否相等(前提保证数组不会溢出),只要i和j两处的值相同就继续移动j,直到遍历完数组。

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length==0){return 0;}
      //创建一个ArrayList接收数组中非重复的元素
        ArrayList list =new ArrayList<>();
        //当出现了 输入数组的长度为0或者输入数组为null的情况
        if(nums==null||nums.length==0){
            return 0;
        }else if (nums.length==1){
            return 1;
        }else {
            //i记录数组最左边的元素位置
            int i=0;
            //n记录数组最右边的元素位置
            int n=nums.length-1;

            while(i<=n){
                //当左右相同说明就要接着寻找了
                if(i==n){
                    list.add(nums[i]);
                    //最后一个元素添加进去之后,记得将i增加
                    i++;
                }else {
                    //创建一个j是开始往右边寻找是不是有重复的元素
                    int j=i+1;
                    while(j<=n&&(nums[j]==nums[i])){
                        //当数组还没有遍历完而且还有相同的情况,j继续向右移动
                        j++;
                    }
                    //此时
                    list.add(nums[i]);
                    i=j;
                }
            }
        }
        for(int k=0;k

不过这种通过的执行时间比较长

Leetcode_删除排序数组中的重复项_第1张图片

思路二:

Leetcode上提供的双指针法,因为数组已经是有序的,我们需要使用两个指针分别为i和j,

其中i为慢指针,j为快指针。其中i指针从0开始,j指针则从1开始,开始比较nums[i]和nums[j]的值

当nums[i]和nums[j]的值不等的时候,就先将i右移一位i++,再将j位置的值赋值给i,保证了i每次走过的都是非重复的数值

直到最终数组遍历完的时候,返回i+1,因为i是数组下标从0开始的,数组长度为下标+1

这种方法的时间复杂度就是0(n),遍历一次数组n的长度,i和j最多遍历n步。空间复杂度为0(1)

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length==0){
            return 0;}
        //i指针从数组起始位置开始
        int i=0;
        //j指针从i+1的位置开始
        for(int j=1;j

Leetcode_删除排序数组中的重复项_第2张图片

 

你可能感兴趣的:(牛客&Leetcode)