[算法学习记录]LeetCode 26. 删除有序数组中的重复项

[算法学习记录]LeetCode 26. 删除有序数组中的重复项

题目

image-20210923004157763
image-20210923004213409
原题连接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

重点

  • 给定的数组已排序,那么重复的元素肯定是挨在一起的;
  • 原地删除,不允许创建新的数组对象,需要在元素组上进行重复数据的删除操作;

解题思路

这里我们使用快慢指针来解题;

说明:分别定义快fast,慢slow指针,初始的位置为数组的首尾;开始移动快指针 fast ,并将快慢指针所在位置的值进行对比;当遇到重复元素的时候,慢指针slow位置不动,继续移动快指针fast,也就是说遇到重复的数就跳过;当快指针fast和慢指针slow不相等,那么将慢指针 slow 前进一步,并将慢指针slow位置所在的值更新为快指针fast所在位置的值;当 fast 指针遍历完整个数组 nums 后,nums[0..slow] 即为去重后的数组,其长度为slow+1

提交代码

class Solution {
    public int removeDuplicates(int[] nums) {
       //定义并初始化快慢指针的位置
        int slow = 0;
        int fast = 0;
       //若数组长度小于等于1,则直接返回原数组
        if (nums.length <= 1) {
            return nums.length;
        }
        while (fast < nums.length) {
           // 当快慢指针所在位置的值不相等
            if (nums[fast] != nums[slow]) {
               //将慢指针往后移动一位
                slow++;
               //将慢指针所在位置的值更新为快指针所在位置的值
                nums[slow] = nums[fast];
            }
           //移动快指针
            fast++;
        }
       //返回无重复数组的长度
        return slow+1;
    }
}

提交记录

image-20210923005914843
此文为个人学习记录,若有疏漏之处还望各位指正,期待与大家交流,共同进步;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值