删除排序数组中的重复项----(算法学习日记21.5.17)

        现在本人是一名大一电子信息工程专业学生,也是刚刚了解算法的重要性。我的学长告诉我以后学习可以发文章记录一下学习的经历,

是一种记笔记的方式,同时也会反映学习的情况, 本人文笔不好,希望未来的我能看懂我现在写的日记。大一空余时间不多,只能慢慢找时间

练习,希望以后能有更多的时间学习算法。

 

 

算法练习网站: 力扣(LeetCode)https://leetcode-cn.com/ 和我一样想学习算法的同学们也可以使用以下,有比较多的算法题目可以练习。

第一次练习算法我是从简单的算法开始练起    题目叫:删除排序数组中的重复项              要求如下:

                   一个数组nums,原地删除重复的元素使每一个元素只出现一次,同时返回数组的长度,不要使用额外的数组空间同时使用空间为O(1);

                    注:数组已按升序排列;

由于不使用额外的数组空间 标签中写明了指针,应使用两个指针,一个指针point2用于遍历所有元素,另一个指针point1用于比较是否重复;

指针point2指向一个元素 然后与指针point1所指向的元素进行比较,如果不同泽将point1所指向的元素进行替换,然后point1指向下一个元素。

我第一次的代码编写如下

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;//数组长度
        int point1 = 0,point2 = 0;
        while(point2 < n){
            if(nums[point1] != nums[point2]){ 
               nums[point1] = nums[point2]; //将不同元素进行赋值    
               point1++;//指向下一个元素
                
            }
            point2++;
        }
        return point1;
    }
}

出现了如下问题:

输入                     [1,1,2]

输出                     [2]

预期结果             [1,2]

结果并不符合预期,重新思考,应该是point2所指向的元素与point1所指向的元素进行比较,如果不同,则先让指针指向下一个元素,然后将point2所指向的元素赋值给point1

同时由于point1是从0开始的,结束的数组长度应该是point1+1。修改过后的代码如下

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int point1 = 0,point2 = 0;
        while(point2 < n){
            if(nums[point1] != nums[point2]){ 
                point1++;//指向下一个元素
                nums[point1] = nums[point2];   //将不同的元素赋值
            }
            point2++;
        }
        return point1+1;//返回数组长度
    }
}

结果如下:

输入                [0,0,1,1,1,1,2,2,3,3,4]

输出                [0,1,2,3,4]

预期结果         [0,1,2,3,4]

 

本人第一次写文章,如有不妥的地方希望大佬能提醒一下,欢迎各位大佬提出各种建议,我会虚心学习。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值