/**
* ref:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
* 给你一个有序数组 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。
**/
public class SortedArrayRemoveDuplicates {
public static void main(String[] args){
int[] array = {0,0,1,1,1,2,2,3,3,4};
System.out.println(removeDuplicates(array));
}
/**
* 解题思路:双指针算法
* 使用两个指针,第一个指针用于记录正在迭代的数据下标,第二个指针用来不重复数据下标。
* 每迭代一次,比较一下两个指针对应的值,如果不等,则指针向后移动并赋值,否则只移动第一个指针即可(数据相等)。
* @param array
* @return
*/
public static int removeDuplicates(int[] array) {
if(array.length==0) return 0;
int j = 0;
// i的取值从1开始,不需要比对第一个元素
for(int i=1;i<array.length;i++){
if(array[i]!=array[j]){
// 进行赋值原因是保证0~j内的元素是不重复的
array[++j] = array[i];
}
}
return j+1;
}
}