Leetcode 02——删除有序数组重复项(Java)

89 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情


前言

此刻停留,这是不变的数组。

此刻编辑,这是独一无二的数组。

删除每一个重复的元素,让数组和元素变得独一无二!

此篇内容以nums数组元素{1,1,2},长度3为解题举例说明,尤其看代码时也可以将此代入阅读代码


题目和解析

image.png

题目解析

我们的目标就是返回一个数组长度,这个数组长度是通过删除原数组相同元素之后得到的。

比如:本来的数组长度是3,里面元素有 {1,1,2},题目要求我们删除相同元素保留一个即可,那么我们删除之后的数组就变成{1,2},新长度为2。

这个2就是我们要返回的值。


温馨提示:或许你会纠结于断言是啥玩意。

解释一下:assert为断言函数,它的功能是,他后面的条件语句结果必须为true,它才会让程序继续执行接下来的语句!


解读一下判题标准:

①定义一个整型数组nums,作为原数组。

   再一定一个整型数组expectNums,作为修改元素后的数组。

  比如nums元素{1,1,2}长度为3,那么expectNums元素{1,2}长度为2。

②题目给我们定义的类是public int removeDuplicates(int[] nums){}

 这里用变量k接收结果(即我们的目标返回值)。

注意,我们调用这个类的时候就改变了原数组的值和长度了,然后和expectNums数组进行比较

③断言一次,只有当k等于expectNums数组长度时继续执行接下来的程序

④进入for循环,看一下修改后nums[]数组和expectNums[]数组是否一致


解题代码

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;   //接收原数组nums的长度给n
        if (n == 0) {          //判断数组长度是否为0
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {   //1<3
            if (nums[fast] != nums[fast - 1]) { //当nums[fast]不等于nums[fast-1]时进入if
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
}