leetcode-26. 删除有序数组中的重复项

106 阅读1分钟
/**
 * 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;
    }
}