问题链接
问题描述
给你一个有序
数组 nums
,请你 原地
删除重复出现的元素,使每个元素 只出现一次
,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组
并在使用 O(1) 额外空间
的条件下完成。
示例
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4
解题思路
我认为这道题和283. 移动零在一定程度上有些类似。
如果不限制“原地对数组进行操作”的话,我们可以创建一个数组,遍历原数组即可得到答案。
仔细阅读题目还可以发现有一个助力:有序数组=》重复元素必定连续。
我们可以这样来完成这道题目:
- 我们原本想创建一个新的数组来排放不重复的数,现在我们直接把数放到旧数组中,用一个变量
length
来记录“新数组”的长度; - 如何获得新数组呢?我们直接遍历老数组,从第
1
位开始(第0
位不需要管),判断是否和前面的数相同,如果相同,继续遍历;如果不同,这就是一个新数,放到数组的第length
位置上,同时,length++
。
代码示例(JAVA)
class Solution {
public int removeDuplicates(int[] nums) {
int length = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[i - 1]) {
nums[length++] = nums[i];
}
}
return length;
}
}
执行结果

网友评论