Leetcode --- NO.26 删除排序数组中的重复项(Java)

题目描述

在这里插入图片描述

在这里插入图片描述

题目分析

  • 根据说明中的条目,且题目要求在原地进行修改可知,操作数组的过程可以直接在数组内部操作,且返回的长度即要输出的数组范围
  • 换成人话说,最后处理完成的结果就是数组的前面部分就是无重复项的数组内容,其余后面的不用管
  • 给出的数组是排好序的

解法分析 — 双游标法

  • 分析可知,这道题只能在原数组上进行操作,那么就需要用到游标了,一个用来遍历数组,一个用来保存结果
  • 假设 i用来遍历,j用来保存结果,那么就是先遍历,判断两个游标指向的值是否相等,如果不等则赋值给j,如果相等,则i继续前进

代码

class Solution {
    public int removeDuplicates(int[] nums) {
        // 判空
        if (nums.length == 0) return 0;
        // 两个游标 res用于标记修改值  cur用于遍历数组
        int res = 0;
        int cur = 1;
        // 循环
        while(cur<nums.length){
            // 不等就修改res值且两个游标都前进
            if (nums[cur] != nums[res]){
                res++;
                nums[res] = nums[cur];
                cur++;
            } else {
                // 相等则cur前进
                cur++;
            }
        }
        // 返回的结果要 +1
        return res+1;
    }
}

猜你喜欢

转载自blog.csdn.net/Kobe_k/article/details/107311440