LeetCode 26、删除有序数组中的重复项

LeetCode 26、删除有序数组中的重复项
FlawLeetCode 26、删除有序数组中的重复项
描述
给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums,使nums的前k个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。 - 返回
k。
判题标准:
系统会用下面的代码来测试你的题解:
1 | int[] nums = [...]; // 输入数组 |
如果所有断言都通过,那么您的题解将被 通过。
示例 1:
1 | 输入:nums = [1,1,2] |
示例 2:
1 | 输入:nums = [0,0,1,1,1,2,2,3,3,4] |
提示:
1 <= nums.length <= 3 * 104-104 <= nums[i] <= 104nums已按 非严格递增 排列
思路
思路一
通过快慢索引依次判断数组中是否有重复或者不重复元素,如果不重复slow就右移,并且当前数组slow位的值是重复则不动fast后移
注意:这道题不用考虑超出数组后的元素,详见断言代码块
1 | /* |
思路二
声明两个指针遍历指针i和赋值指针j,然后对数组进行遍历,先通过i指针进行判断两种情况一种数组长度为0的情况和数组的第i位置元素和第i-1位置元素不一样的情况,如果出现这两种情况,就将当前位置遍历指针i的所在数组的值赋值给指针J所在的数组,然后赋值指针后移。。依次进行下去到最后,赋值指针j的长度就是不重复元素的长度,以及当前数组的前j都是不重复的元素。
1 | class Solution { |








