从排序数组中删除重复项(传送门)
题目:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 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]从排序数组中删除重复项