[LEETCODE]从排序数组中删除重复项

从排序数组中删除重复项(传送门)

题目:

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

题目解答:

Java

class Solution {
    public int removeDuplicates(int[] nums) {
        //关注极端案例,可以使得代码更加“健壮”
        if (nums.length == 0)
            return 0;
        int number = 0;
        //不适用额外数组空间
        for (int i=0; i < nums.length ; i++) {
            if ( nums[i] != nums[number] ) {
                number++;
                nums[number] = nums[i];
            }
        }
        number+=1;
        return number;
    }
}

题目剖析:

关键点有几个:排序数组(已排序),原地删除,不使用额外的数组空间。

思路历程:这里强调一点,就是审题!请务必做好审题工作!请务必做好审题工作!请务必做好审题工作!重要的事情要说三遍。我前期审题了的时候就忽略了“排序”这个词。因为排序好的数组,就意味着[0,1,0,2]这种情况的数组就不存在了。好了,回归正题。我们来分析一下答案为什么要这么写叭。

首先,前面一段,直接判断当数组长度为0的时候,则直接返回0.

其次,当数组正常情况下(即数组是已经排序好了的。)。那么就需要处理多余的数组里的值。要想解这道题,最主要的是要理解数组对象的存储的数据都是对其他的数据的引用,他存储在各种常量池中。

 

 

未经允许不得转载:RffanLAB|Rffan实验室 » [LEETCODE]从排序数组中删除重复项

赞 (0)

相关推荐

    暂无内容!

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址