题目描述:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成
示例 1:
示例2:
刚拿到这个题的时候,人还是有一点懵的,但是仔细想了想,其实并没有那么难,只需要判断它的前一个是不是和当前元素相等就行了.
如图:
假如我现在有一个如上图的一个数组,我们不需要动下标0的元素,这样我们就可以从下标1开始遍历.
我们先定义一个idx下标,idx下标从1开始,标记我们下一个不重复的元素所放的位置.
如果当前元素和它的前一个元素相同的话,我们不用管它,直接让i++就行,但是如果不同的话,我们就要将当前的元素放在idx下标的位置上,idx自增.
此时就是我们遍历完后的数组,可以看到idx下标刚好是3,我们数组中有效的元素也是3个.
所以直接返回下标就行.
代码如下:
public int removeDuplicates(int[