给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
自己写的代码
class Solution { public int removeDuplicates(int[] nums) { //当数组长度小于等于1时,直接返回数组长度,因为不会重复 if(nums.length<=1){ return nums.length; } //index用于标记不重复数字有多少 int index = 1 ; for(int i =1;i<nums.length;i++){ //当发生重复时,跳过此次循环 if(nums[i]==nums[i-1]){ continue; } //没有重复时,将当前元素按index为下标赋值为不重复元素 nums[index]=nums[i]; //下标加1 index++; } //最终循环结束下标多加的1,index变成了长度,返回index return index; } }这次我和官方的时空效率一致,但是实现的具体方式有所不同。官方的代码量比我少,在循环内进行if判断的时候方向不相同。 思路都是将原来的数组当成两个数组进行看待,一个数组是原来的排序好的数组,另一个是存放不同元素的数组。后者在遍历前者之后得到,前者也在遍历结束后被破坏。
class Solution { public int removeDuplicates(int[] nums) { if (nums.length == 0) return 0; int i = 0; for (int j = 1; j < nums.length; j++) { if (nums[j] != nums[i]) { i++; nums[i] = nums[j]; } } return i + 1; } } 官方使用的是不相同的时候进行赋值,下标自增。我使用的是相同的时候直接跳过本次循环,不同的时候进行下标自增。这样看,那肯定是官方妙啊!,比较时空效率相同,两者代码可读性差不多的情况下,我代码量还要更多一些,做了一步continue操作。leetCode
emm,思路还有待转换拔高!------swrici
