26.删除有序数组中的重复项

12 篇文章 0 订阅
12 篇文章 1 订阅

解题思路

什么快慢指针,还是有点蒙圈

代码 C

int removeDuplicates(int* nums, int numsSize){
    //考虑边界情况1 数组为空时
    if(numsSize==0)
        return 0;
    //考虑边界情况2 数组只有一个元素时
    if(numsSize==1)
        return 1;
    //考虑边界情况3 数组有只两个元素时
    if(numsSize==2){
        if(nums[0]!=nums[1])
            return 2;
        else
            return 1;
    }

    int lowIndex=0;     //满指针从第一个开始
    int fastIndex=1;    //快指针从第二个开始寻找
    for(fastIndex;fastIndex<numsSize;fastIndex++){  //当快指针不越界时
        if(nums[fastIndex] != nums[lowIndex]){      //如果快指针找到了不等于满指针的数
            nums[++lowIndex] = nums[fastIndex];     //就将找到的数赋值给慢指针的下一个数
        }
    }
    return lowIndex+1;  //慢指针所指的位置即为数组最后一个元素,+1以后便是所求数组大小
}

代码 Java

class Solution {
    //删除已排序数组中重复的元素
    //只要后面的元素不一样,就可以拿来从头接起
    public int removeDuplicates(int[] nums) {
        //给定的数组长度
        int len=nums.length;
        //两个指针
        int a,b;
        a=0;//指针起始0
        b=1;//指针起始1
        //当后面的指针不越界时
        while(b<len){
            //比较,找到不同的数(b所在)拿来放在a的后一个位置
            if(nums[a]!=nums[b]){
                a++;
                nums[a]=nums[b];
            }else{//否则就是相同的,此时a不动,b++,总长度--
                b++;
            }
        }//最后输出的长度就是a所在的下标后移一个
        return ++a;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asjodnobfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值