LeedCode 之 Remove Duplicates from Sorted Array

题目链接:Remove Duplicates from Sorted Array
题意是:给定一个已经排序的数组,删除重复的位置,使每个元素只显示一次并返回新的长度。
同时不要分配另一个数字,占用额外空间

这里主要是有三个需要注意的地方:已经排序的数组,删除位置,不能占用额外空间。
刚开始只是想着当发现重复数据就使数组长度减1就可以了,但是使用无法通过LeedCode,再仔细读一遍题意,是需要删除重复位置的,因为是已经排好序的,因此只需要首先比较相邻位置的元素是否相同即可。

思路如下:
1、初始化i=0,比较nums[i]和nums[i+1]是否相同,如果相同,则将i+1后的元素依次往前移,即删除i+1的位置,并且len-1;
2、如果不相同,则i+1,继续比较相邻位置元素,以此类推

public int removeDuplicates(int[] nums) {
        int len = nums.length;
        //int relen = len;
        int i=0;
        //首先需要判断当len的长度为0或者为1的情况
        if(len==0||len==1)
            return len;
        do{
            if(nums[i]==nums[i+1])
            {
                //先删除位置,再将长度减1; 
                for(int j=i+1;j<len-1;j++)
                    nums[j]=nums[j+1];
                len--;
            }
            else
                i++;
            }while(i<len-1);
        return len;
    }

虽然这几次编写的都是简单的题目,还花费了一定得时间,但是基本都是通过自己的思考和编写做出来的,还是有进步的,继续加油了~

同样在网上搜索其他人的思路:
1、定义i指向非重复数组的尾部,并初始化i=0;
2、定义next指向需要处理的元素,初始化next=1;
3、比较nums[i]和nums[next]是否相等,如果相等,则next++;
4、如果不相等,则将nums[next]移动到nums[i+1];

public int removeDuplicates(int[] nums) {
        int len = nums.length;
        if(len==0||len==1)
            return len;
        int i=0;
        int next=1;
        while(next<len){
            if(nums[next]==nums[i])
                next++;
            else
            {
                nums[i+1] = nums[next];
                i++;
            }
        }
        return i+1;
    }

通过学习了其他的解法,发现自己的解法还是有点麻烦的,所以值得学习~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值